首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

强行终止线程,该如何解决

2012-01-23 
强行终止线程使用的是boost线程库,主线程构造出一个任务队列,依次执行队列中的任务,创建线程用于处理单个

强行终止线程
使用的是boost线程库,主线程构造出一个任务队列,依次执行队列中的任务,创建线程用于处理单个任务;

在某些情况下创建的线程执行体会出现死锁的现象,比如对远程网络文件操作时遇到网络异常,处理函数长时间不返回,此时如何强行终止该线程,以便继续执行后面的任务?

static long thread_proc(void* data)
{
  do_write_remote_file();
  return 0;
}

thread_task()
{
  thread = boost::thread(boost::bind(&thread_proc, param));
  thread.join();
}

[解决办法]
发消息,让其退出线程
[解决办法]

BOOL TerminateThread(
HANDLE hThread, 
DWORD dwExitCode
);
可强行结束线程。


[解决办法]
最好是让线程函数返回来退出线程

或者如3L所说 用TerminateThread或者ExitThread来退出。

[解决办法]
线程中建立消息队列和循环,主程序PostThreadMessage
[解决办法]
永远不要强制线程退出,另外,LS说的ExitThread那是线程内部使用的
[解决办法]

大家都知道让线程自然退出的好处,不好有时由于设计的不好,没有办法时还是要用TerminateThread


[解决办法]

探讨

引用:
引用:
大家都知道让线程自然退出的好处,不好有时由于设计的不好,没有办法时还是要用TerminateThread


那是结构要修改

TerminateThread后,指定的线程会立刻终止执行(除非他还在执行系统API未返回),这会造成本该有的结束处理动作得不到执行。在大系统中,访问的资源较多或线程关联关系较复……

热点排行