如何判断线程状态? 如何判断线程状态?HANDLE hThread; hThread=CreateThread(NULL,0,(unsigned long(_stdcall*)(void*))GetRecvMessageThread, (LPVOID)this,0,NULL); CloseHandle(hThread); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 windows api 只能知道线程死没死,想知道状态,自己维护全局变量吧,一个写,一个读,不需要同步的,更高级的就用事件,写完了通知再读 直接用GetExitCodeThread()函数,它的返回值表明了线程的状态 BOOL GetExitCodeThread( HANDLE hThread, LPDWORD lpExitCode); 第一个参数线程句柄 ,是输入值第二个参数是输出值,保存返回码 和STILL_ACTIVE 只有这两种了. 第一种表示线程已经结束了.如果还要其它的状态.只有visualassist4680 所说的自己维护一个状态变量了 GetExitCodeThread判断不出结束与否 void CCCCC::OnTimer(UINT nIDEvent) { CDialog::OnTimer(nIDEvent); OnTime();}定时去创建线程.void CCCC::OnTime() {HANDLE hThread;hThread=CreateThread(NULL,0,(unsigned long(_stdcall*)(void*))SendMessageThread, (LPVOID)this,0,NULL);CloseHandle(hThread);}创建线程.DWORD WINAPI CCCC::SendMessageThread(CCCC*pDlg){ pDlg->OnSend(); return 0;}触发sendVoid CCCC::Send(CString strDA, CString strContent, int nID){ char anse[128]; CString strTemp; strTemp="AT\r"; dwCount=strTemp.GetLength(); WriteFile(hCom,strTe.........................}在时间到的时候每10秒,再次去创建线程,但有一个条件就是得Send已经把数据处理完毕,才能再次创建. LZ可以试试看 在Void CCCC::Send(CString strDA, CString strContent, int nID)的最后加一个全局变量m_bEnd,判断是否读写完成,从而决定是否执行再次创建.。void CCCCC::OnTimer(UINT nIDEvent) {CDialog::OnTimer(nIDEvent);if(m_bEnd) OnTime();} 你不要调用CloseHandle(hThread);把hThread保存起来DWORD ExitCode;然后用GetExitCodeThread( hThread, &ExitCode); 就可以了 hThread保存成成员变量,程序退出时载CloseHandle(hThread); 这样好像是不行哦。试过的,目前是采用的保存一个标志来判断线程中的function是否执行完毕。 应该有一个API能够取得线程的状态吧,不然那些杀毒程序怎么能获得系统中的线程状态 if(GetExitCodeThread(hThread, dwExitCode)){ if(STILL_ACTIVE == dwExitCode) { //线程还在运行 } else { //线程结束 }}当然也可以用WaitForSingleObject来判断WaitForSingleObject(hThread,INFINITE);只有当线程结束的时候,信号量才有信号 你是不是不会用GetExitCodeThreadExitCode 和STILL_ACTIVE比较 mfc关于字符串中存放变量的问题,高手帮帮我吧。 MFC 怎样在单文档模式下 嵌入对话框 如何分析来自网卡的http请求报文!!!!!! RichEdit中的文字如何实现动态居中、左对齐或右对齐?再现等待 一个界面问题,高手请指点。 怎么样让自己的OCX在网页中响应 单击 ??? 谢谢提供 当窗体重画时,图片显示不出? mci_seek如何用,请大家给个例子. 谁能告诉我学MFC什么书比较好! 如何编写类似于VC IDE 的menubar 如何锁定当前对话框操作 inter手册下载
HANDLE hThread,
LPDWORD lpExitCode
);
第一个参数线程句柄 ,是输入值
第二个参数是输出值,保存返回码 和STILL_ACTIVE 只有这两种了. 第一种表示线程已经结束了.如果还要其它的状态.只有visualassist4680 所说的自己维护一个状态变量了
GetExitCodeThread判断不出结束与否
{
CDialog::OnTimer(nIDEvent); OnTime();
}
定时去创建线程.
void CCCC::OnTime()
{
HANDLE hThread;
hThread=CreateThread(NULL,0,(unsigned long(_stdcall*)(void*))SendMessageThread, (LPVOID)this,0,NULL);
CloseHandle(hThread);
}
创建线程.
DWORD WINAPI CCCC::SendMessageThread(CCCC*pDlg)
{
pDlg->OnSend();
return 0;
}
触发sendVoid CCCC::Send(CString strDA, CString strContent, int nID)
{ char anse[128];
CString strTemp;
strTemp="AT\r";
dwCount=strTemp.GetLength();
WriteFile(hCom,strTe
.........................
}在时间到的时候每10秒,再次去创建线程,但有一个条件就是得Send已经把数据处理完毕,才能再次创建.
Void CCCC::Send(CString strDA, CString strContent, int nID)
的最后加一个全局变量m_bEnd,判断是否读写完成,从而决定是否执行再次创建.。void CCCCC::OnTimer(UINT nIDEvent)
{CDialog::OnTimer(nIDEvent);
if(m_bEnd)
OnTime();
}
把hThread保存起来
DWORD ExitCode;
然后用GetExitCodeThread( hThread, &ExitCode); 就可以了
这样好像是不行哦。试过的,目前是采用的保存一个标志来判断线程中的function是否执行完毕。
{
if(STILL_ACTIVE == dwExitCode)
{
//线程还在运行
}
else
{
//线程结束
}
}
当然也可以用WaitForSingleObject来判断
WaitForSingleObject(hThread,INFINITE);
只有当线程结束的时候,信号量才有信号