我不需要正确终止线程,或使其响应"终止"命令.我有兴趣使用纯C++ 11强制终止线程.
你如何结束长期运行的Lua脚本?
我有两个线程,一个运行主程序,另一个控制用户提供的Lua脚本.我需要杀死正在运行Lua的线程,但首先我需要脚本退出.
有没有办法强制脚本退出?
我已经读过,建议的方法是返回一个Lua异常.但是,并不保证用户的脚本将调用api函数(它可能处于紧张的繁忙循环中).此外,用户可以通过使用a来防止错误导致他的脚本退出pcall.
我正在考虑在我的应用程序中使用C++ 0x线程而不是Boost线程.但是,我不确定如何重新实现我对标准C++ 0x线程的重新实现,因为它们似乎没有interrupt()方法.
我目前的设置是:
工人wait()至少要求两个不同的条件变量.师父有一个"超时"状态:在这种情况下,它告诉所有工人停下来并给出他们当时获得的任何结果.使用Boost线程master只是interrupt_all()在线程组上使用,这导致worker停止等待.如果他们现在没有等待,主人还会设置一个bool工人定期检查的标志.
但是,在C++ 0x中,std::thread我没有看到任何替代品interrupt().我错过了什么吗?如果没有,我如何实施上述计划,以便工人不能永远睡觉?
我有一个工作者std::thread,我希望它的主循环检查是否有其他线程告诉它停止循环并退出.
什么是一个很好的跨平台方式来做到这一点?boost是否为它提供了一些事件对象?
使用只是一个bool考虑线程安全?
如何使用C++线程模拟pthread_kill()函数?我之前问了一个关于这个的问题,但没有回应.线程:: native_handle()函数会帮助吗?
我目前正在开发一个程序,需要从套接字服务器下载一些图像,下载工作将执行很长时间.所以,我创造了一个新std::thread的做法.
一旦下载,std::thread它将调用当前Class的成员函数,但此类可能已被释放.所以,我有一个例外.
如何解决这个问题呢?
void xxx::fun1()
{
   ...
}
void xxx::downloadImg()
{
 ...a long time
  if(downloadComplete)
  {
   this->fun1();
  }
}
void xxx::mainProcees()
{
  std::thread* th = new thread(mem_fn(&xxx::downloadImg),this);
  th->detach();
  //if I use th->join(),the UI will be obstructed
}
有没有办法从另一个取消boost :: thread,如下所示?:
boost::thread* thread1(0);
boost::thread* thread2(0);
thread2 = new boost::thread([&](){
   //some expensive computation that can't be modified
  if(thread1)
    thread1->interrupt();  
});
thread1 = new boost::thread([&]() {
  //some other expensive computation that can't be modified
  if(thread2)
    thread2->interrupt();  
});
thread1->join();
thread2->join();
delete thread1;
delete thread2;
现在,两个昂贵的计算都完成而不会被打断.我认为连接将被视为中断点,主线程将在完成两个昂贵的计算之一后继续.