使用的是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();
}

解决方案 »

  1.   


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

  2.   

    最好是让线程函数返回来退出线程或者如3L所说 用TerminateThread或者ExitThread来退出。
      

  3.   

    线程中建立消息队列和循环,主程序PostThreadMessage
      

  4.   

    最好让线程自己return 0;返回
      

  5.   

    永远不要强制线程退出,另外,LS说的ExitThread那是线程内部使用的
      

  6.   


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

  7.   


    那是结构要修改TerminateThread后,指定的线程会立刻终止执行(除非他还在执行系统API未返回),这会造成本该有的结束处理动作得不到执行。在大系统中,访问的资源较多或线程关联关系较复杂时,忽视这个问题会造成可怕的后果。
      

  8.   


    我要解决的问题就是“线程执行函数中写文件的api没有返回啊”,有时候要等10多分钟,想在返回之前强行终止该线程。
      

  9.   


    boost没用过,线程函数原型是什么?等10分钟就是在等写文件完成?你可以用异步重叠I/O啊
      

  10.   


    文件读写是别人的模块,读写过程中如果出现网络异常时,系统底层api确实不返回。