如何杀死正在运行的线程? [复制]

2024-04-26

可能的重复:
杀死 pthread 中的线程 https://stackoverflow.com/questions/2084830/kill-thread-in-pthread

在包含线程启动的源代码之后,过了一会儿我想杀死它。怎么做 ?无需对线程函数进行任何更改

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>

pthread_t test_thread;

void *thread_test_run (void *v) // I must not modify this function
{
    int i=1;
    while(1)
    {
       printf("into thread %d\r\n",i);
       i++; 
       sleep(1);
    }
    return NULL
}

int main()
{
    pthread_create(&test_thread, NULL, &thread_test_run, NULL);

    sleep (20);
    // Kill the thread here. How to do it?

   // other function are called here...

    return 0;
}

您可以使用pthread_cancel() http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_cancel.3.html杀死一个线程:

int pthread_cancel(pthread_t thread);

请注意,线程可能没有机会进行必要的清理,例如释放锁、释放内存等。所以您应该首先使用pthread_cleanup_push()添加线程取消时将调用的清理函数。来自男人pthread_cleanup_push(3) http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_cleanup_push.3.html:

这些函数操纵调用线程的堆栈 线程取消清理处理程序。清理处理程序是 当线程被取消时自动执行的函数(或者 在下述各种其他情况下);可能,对于 例如,解锁互斥体,以便其他线程可以使用它 正在进行中。

关于线程是否阻塞是否会被取消的问题,不能保证,注意手册中也提到了这一点:

线程的取消类型,由 pthread_setcanceltype(3) 确定, 可能是异步或延迟(默认为 new 线程)。异步可取消性意味着线程 可以随时取消(通常会立即执行,但系统会 不保证这一点)。延迟取消意味着取消 将被延迟,直到线程下一次调用一个函数 取消点。

所以这意味着唯一保证行为是线程将在调用后的某个时刻被取消pthread_cancel().

Note: 如果您无法更改线程代码以添加清理处理程序,那么您唯一的其他选择就是使用以下命令终止线程pthread_kill() http://pubs.opengroup.org/onlinepubs/7908799/xsh/pthread_kill.html,然而,由于上述原因,这是一种非常糟糕的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何杀死正在运行的线程? [复制] 的相关文章

  • SharpZipLib - 将文件夹/目录添加到 zip 存档

    通过示例 我很好地掌握了如何提取 zip 文件 几乎在每个示例中 识别 ZipEntry 是否为目录的方法如下 string directoryName Path GetDirectoryName theEntry Name string
  • 如何将十六进制字符串转换为十六进制数字[重复]

    这个问题在这里已经有答案了 可能的重复 如何将十六进制字符串转换为有符号整数 https stackoverflow com questions 3705429 how do i convert hex string into signed
  • 在Application_AquireRequestState事件中用POST数据重写Url

    我有一个在其中注册路线的代码Application AcquireRequestState应用程序的事件 注册路由后 我会在 Http 运行时缓存中设置一个标志 这样我就不会再次执行路由注册代码 在此事件中注册路线有特定原因Applicat
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 为什么这个函数指针赋值在直接赋值时有效,但在使用条件运算符时无效?

    本示例未使用 include 在 MacOS10 14 Eclipse IDE 上编译 使用 g 选项 O0 g3 Wall c fmessage length 0 假设这个变量声明 int fun int 这无法通过 std touppe
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 导出类时编译器错误

    我正在使用 Visual Studio 2013 但遇到了一个奇怪的问题 当我导出一个类时 它会抛出 尝试引用已删除的函数 错误 但是 当该类未导出时 它的行为会正确 让我举个例子 class Foo note the export cla
  • Qt 计算和比较密码哈希

    目前正在 Qt 中为测验程序构建面向 Web 的身份验证服务 据我了解 在数据库中存储用户密码时 必须对其进行隐藏 以防落入坏人之手 流行的方法似乎是添加的过程Salt https en wikipedia org wiki Salt cr
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • 默认值 C# 类 [重复]

    这个问题在这里已经有答案了 我在控制器中有一个函数 并且我收到表单的信息 我有这个代码 public Actionresult functionOne string a string b string c foo 我尝试将其转换为类似的类
  • 您可以在一个 Windows Azure 实例上部署多个 Web 应用程序吗?

    是否可以在一个 windows azure 小型计算实例中运行一堆 Web 应用程序 我正在考虑使用 Azure 作为放置一堆处于开发和非生产状态的项目 Web 应用程序 的地方 有些实际上已经被封存了 但我想在某个地方有一个活跃的实例 我
  • 使用 AdHocWorkspace 会导致“不支持语言‘C#’”。

    在VS2015中使用Microsoft CodeAnalysis CSharp Workspaces的RC2 这段代码会抛出异常 var tree CSharpSyntaxTree ParseText var workspace new A
  • 正确使用“extern”关键字

    有一些来源 书籍 在线材料 解释了extern如下 extern int i declaration has extern int i 1 definition specified by the absence of extern 并且有支
  • 如何访问窗口?

    我正在尝试使用其句柄访问特定窗口 即System IntPtr value Getting the process of Visual Studio program var process Process GetProcessesByNam
  • C++ [Windows] 可执行文件所在文件夹的路径[重复]

    这个问题在这里已经有答案了 我需要访问一些文件fstream在我的 Windows 上的 C 应用程序中 这些文件都位于我的exe文件所在文件夹的子文件夹中 获取当前可执行文件的文件夹路径的最简单且更重要的 最安全的方法是什么 Use 获取
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • g++ C++0x 枚举类编译器警告

    我一直在将可怕的 C 类型安全伪枚举重构为新的 C 0x 类型安全枚举 因为它们是way更具可读性 不管怎样 我在导出的类中使用它们 所以我明确地将它们标记为导出 enum class attribute visibility defaul
  • C# 粘贴到文本框时检查剪贴板中的字符

    有没有一些方法可以在粘贴到文本框 C 之前仅检查剪贴板中的字符 Ctrl V 和右键单击 gt 粘贴 但不使用 MaskedTextbox 在文本框文本更改中添加规则以仅接受数字 例如 private string value privat
  • Android进程调度

    我试图更好地理解 以便在创建 Android 应用程序 服务时确定潜在的互操作性问题对可靠性的影响 我想弄清楚进程优先级是如何确定的 服务和活动之间优先级的差异以及调度程序是否以不同方式对待它们的优先级 基本上 我试图深入了解某个活动或服务

随机推荐

  • Rails form_for 选择已选择选项的标签

    我正在使用 form for 来更新用户个人资料 作为表单的一部分 我使用选择菜单 菜单由数组填充 即 STATUS Active active In Active inactive 然后在表格中 虽然这项工作没有选择之前在编辑时选择的选项
  • querySelector 中哪些字符需要转义?

    根据这里的文档 https developer mozilla org en US docs Web API document querySelector Notes https developer mozilla org en US do
  • 如何用Java编写某些语法的LALR解析器?

    我想编写 Java 代码来为我的语法构建 LALR 解析器 有人可以推荐一些书籍或一些链接 让我可以学习如何为 LALR 解析器编写 Java 代码吗 手动编写 LALR 解析器很困难 但他可以做到 如果您想了解手动构建解析器背后的理论 请
  • CodeIgniter - 自动加载

    我想知道 CodeIgniter 自动加载的最佳实践是什么 自动加载我的所有内容是不是不好的做法might是否曾经需要过 或者可以这样做吗 这会给应用程序带来更多负载吗 目前 我只是自动加载我将在整个应用程序中使用的库和助手 autoloa
  • MySQL 视图:在另一个计算字段中引用一个计算字段(按名称)

    例如 如何定义具有两个计算字段的视图 TableName BlueSquares TableName RedSquares AS TotalSquares TableName BlueCirles TableName RedCircles
  • 如何从一个Android应用程序调用另一个Android应用程序

    我想从另一个应用程序调用一个 Android 应用程序 我尝试过一些examples http www anddev org install run applications from within another application
  • 使用 JsonView 将 POJO 转换为 JsonNode

    我正在编写一个典型的 Play Framework 应用程序 我想使用 Jackson 从控制器的方法返回 JsonNode 这就是我现在正在做的 public static Result foo MyPojoType myPojo new
  • 如何禁用 moment.js 夏令时时区转换

    可以在 moment js 中禁用日光时区转换吗 http plnkr co edit MjFelt p preview http plnkr co edit MjFelt p preview scope obj date moment 2
  • 如何检查 Mypy `# type:ignore` 注释是否仍然有效且必需?

    想象一下 我们有一些巨大的遗留代码库 其中有很多文件被忽略了 Mypy 警告 def foobar x some external class some method 0 type ignore ignore some mypy warni
  • spring boot应用程序在ec2上自动关闭

    我在 ec2 上部署了 springboot 应用程序 ubuntu 为 t2 medium 大小 AWS AMI 为 t3 medium 大小 在我的本地电脑上 没有问题 但在 ec2 上 几个小时后 在我不工作期间 它自己死了 我只是想
  • 模块“pandas”没有属性“read_csv”

    import pandas as pd df pd read csv FBI CRIME11 csv print df head 运行这个简单的代码会出现错误 Traceback most recent call last File C U
  • 当将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast

    Both static cast and reinterpret cast似乎适合铸造void 到另一个指针类型 是否有充分的理由偏爱其中之一 Use static cast 这是最精确的转换 准确地描述了此处进行的转换 有一个误解 认为使
  • 具有异步函数的 JavaScript 数组

    我有一个 JavaScript 字符串数组 该数组的定义如下 var myArray myArray push 1 myArray push 2 myArray push 3 我需要循环遍历数组并调用异步运行的函数 该函数如下所示 func
  • Visual Studio/SOAP -“添加服务引用”与“添加 Web 服务引用”

    我发现我可以将计划使用的 SOAP WSDL 服务作为 Web 服务引用 System Web Services 或 服务引用 System ServiceModel WCF 导入到我的解决方案中 我想知道有什么区别 据我所知 添加服务引用
  • RedHat 6/Oracle Linux 6 不允许通过 ssh 进行密钥身份验证

    密钥已正确部署在 ssh authorized keys 中 然而 ssh 不断提示输入密码 几个问题 主要是特权 但也与 RedHat 6 上的 SELinux 有关 以下脚本应该可以修复所有问题 请替换
  • 非矩形 CSS 图像链接

    我有以下要求 大图像包含多个需要链接到其他页面的 热点 听起来很简单 我创建了一个简单的 html 页面 一个带有背景图像的 div 和使用带有图像精灵翻转的 CSS 的绝对定位链接 然而 现在我看到了另一张图像 热点不是方形的 而是不规则
  • 仅带有取消按钮的消息框

    我们可以有一个只有取消按钮的消息框吗 如果是这样 有什么提示吗 是否有内置的 api 方法来仅获取带有取消按钮的消息框 如何创建自定义模式对话框 有链接吗 您可以通过以下方式使用线程本地 CBT 挂钩SetWindowsHookEx 定制M
  • extern 在 C# 中如何工作?

    每当我足够深入地观察反射镜时 我都会碰到extern没有来源的方法 我阅读了 msdn 文档http msdn microsoft com en us library e59b22c5 v vs 80 aspx http msdn micr
  • 需要一些异步调用的单例类

    我有一个单例类 它在其构造上加载一些数据 问题是加载这些数据需要调用async方法 但构造函数不能async 换句话说 我的班级具有以下结构 public class Singleton private static Singleton i
  • 如何杀死正在运行的线程? [复制]

    这个问题在这里已经有答案了 可能的重复 杀死 pthread 中的线程 https stackoverflow com questions 2084830 kill thread in pthread 在包含线程启动的源代码之后 过了一会儿