改变线程任务?

时间:2011-08-16 18:05:13

标签: c++ multithreading boost

我知道你不能杀死一个提升线程,但你可以改变它的任务吗?

目前我有一个包含8个线程的数组。按下按钮时,会为这些线程分配一个任务。它们被分配的任务完全独立于主线程和其他线程。没有任何线程必须等待或类似的东西,所以中断点永远不会到达。

我需要的是,随时改变每个线程正在执行的任务。这可能吗?我已经尝试循环遍历线程数组并将每个线程对象指向的内容更改为新线程,但当然这对旧线程没有任何作用。

我知道你可以打断pThreads,但我找不到一个可以下载库的工作链接来检查它。

1 个答案:

答案 0 :(得分:3)

线程不是可以做某事的某种神奇物体。它是通过代码执行的单独路径。您的代码不能在其代码库周围任意跳转,除非您专门对其进行编程。即使这样,它也只能在C ++规则内完成(即:调用函数)。

你无法杀死boost::thread,因为杀死一个线程会完全破坏程序员做出的一些最基本的假设。您现在必须考虑下一行不能执行的可能性,原因是您既无法预测也无法预防。

这与异常处理不同,C ++特别需要调用析构函数,并且您能够捕获异常并进行特​​殊清理。您正在谈论执行一段代码,然后突然在已经编译的代码中插入一些随机函数的调用。那不行。

如果您希望能够更改线程的“任务”,那么您需要构建具有“任务”的线程。它需要经常检查它没有被赋予新任务,如果有,那么它就会切换到这样做。您必须定义何时完成此切换,以及切换发生时世界处于什么状态。