线程和信号
Threads and Signals
我有一个使用boost线程的C 98项目。主线程创建了这样的12个线程:
for(int i=0;i<numCPU;++i)
{
vThreads.push_back(new boost::thread(boost::bind(&TControl::startCPU,this,i,fnp)));
}
和工作线程只要getWork()返回工作单元即可运行:
void startCPU(int id,StartFn fnp)
{
unused(id);
while(true)
{
WU_TYPE* pWU(getWork());
if(pWU==NULL) return;
CALL_MEMBER_FN(pWU,fnp)();
}
}
某些工作单位可能运行很长。现在的目标是杀死已经运行时间超过60分钟的工作单位,以便线程(运行void startcpu())可以启动新的工作单位。
最初,我认为这可以通过信号来完成,即主线程每分钟可以发出信号,并且每个线程内部的信号处理程序可能会为逾期工作单元提供例外。但是,经过一番阅读,它似乎无法正常工作,因为一个线程从一个线程中提出的信号不会启动另一个线程的信号处理程序,对吗?什么是实现此目标的合适技术?
注意:C 11不可用,软件必须在旧系统上编译。
没有当前在线程中运行的代码的支持,就无法完成。线程共享过程上下文。他们获取锁,然后破坏上下文,并且必须在释放锁或过程上下文之前将上下文返回到理智状态。因此,如果没有当前正在运行的代码的合作,就无法杀死线程。
与其合作,您可以使用它支持的任何方法。如果代码支持Boost的中断功能,则可以使用它。代码必须实现"中断点",检查它是否已中断并清洁终止线程 - 否则,interrupt
不会做任何事情。如果它支持其他机制,请使用它。但必须从一开始就设计。
否则,用过程而不是线程隔离代码。只要您不做任何怪异的事情(例如与之共享内存),您可以终止一个过程。
相关文章:
- 线程之间的布尔停止信号
- 通过安装信号处理程序关闭多线程应用程序
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 发出信号以从线程更新 UI
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- 从另一个线程发出信号是否安全?
- boost信号和插槽在不同的线程中不工作(使用boost::asio::io_service)
- Qt:向死/停止线程发送信号
- 多线程.如果我使用信号量,我可以在开始时创建很多线程还是应该只有几个线程?
- Qt5 跨线程信号和插槽
- 在另一个线程上发出 QObject 信号的正确方法?
- Qt5 多线程:信号仅单向工作
- 将信号从工作线程类连接到控制器类 - QThreads
- 信号/插槽多线程 Qt
- Qt-使用信号和具有不同线程的插槽
- 是否可以向特定的线程 ID 发送信号?
- QT 4.8,如何从不同线程发送信号
- 一个类中的QT信号/插槽,但从不同的线程发出
- glib:在另一个线程上处理自定义 GMainContext* 循环,不引发信号处理程序
- 如果信号线程被阻塞,为什么接收线程中不处理信号