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

如何判断一个线程已经结束?

2012-03-16 
怎么判断一个线程已经结束?? - C++ Builder / Windows SDK/APIp_socket_main_threadnew SOCKET_MAIN_THRE

怎么判断一个线程已经结束?? - C++ Builder / Windows SDK/API
p_socket_main_thread=new SOCKET_MAIN_THREAD(1); //新建线程

p_socket_main_thread->ip_str=ip; //传递IP地址
p_socket_main_thread->port=port; //传递PORT
p_socket_main_thread->Priority=tpHigher; //线程优先级高
p_socket_main_thread->Resume(); //线程恢复运行,这一句会出现警告:[BCC32 Warning] GPRS_CTRL.cpp(35): W8111 Accessing deprecated entity '_fastcall TThread::Resume()' 
这个警告怎么消除??



线程怎么结束??
if(p_socket_main_thread!=NULL) //
{
//发送消息,SOCKET主线程自动退出
PostThreadMessage(p_socket_main_thread->ThreadID,WM_SERVER_STOP,0,0);

//等待线程退出
p_socket_main_thread->WaitFor(); //???????????????????????????????
   
  //貌似线程并没有退出,就返回了
//关闭句柄
CloseHandle((void *)p_socket_main_thread->Handle);
p_socket_main_thread=NULL;
}




[解决办法]
因为在C++Builder2009/2010以后的版本中,
TThread类的Resume和Suspend函数已不建议使用. 
如果要挂起或恢复线程,访问Suspended属性即可:
thread->Resume();
thread->Suspend();
换成
thread->Suspended = false;
thread->Suspended = true;
[解决办法]
判断线程是否退出 
可以在线程的里做个标志变量
来表示当前线程的状态
[解决办法]
首先你用了WaitFor方法就不能用FreeOnTerminate = True了
WaitFor方法和Terminate()方法结合使用
p_socket_main_thread->Terminate();
p_socket_main_thread->WaitFor();

热点排行