读书人

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

发布时间: 2012-03-16 16:34:56 作者: rapoo

怎么判断一个线程已经结束?? - 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();

读书人网 >C++ Builder

热点推荐