如何判断线程状态?
HANDLE hThread;
hThread=CreateThread(NULL,0,(unsigned long(_stdcall*)(void*))GetRecvMessageThread, (LPVOID)this,0,NULL);
CloseHandle(hThread);

解决方案 »

  1.   

    windows api 只能知道线程死没死,想知道状态,自己维护全局变量吧,一个写,一个读,不需要同步的,更高级的就用事件,写完了通知再读
      

  2.   

    直接用GetExitCodeThread()函数,它的返回值表明了线程的状态   
      

  3.   

    BOOL GetExitCodeThread( 
      HANDLE hThread, 
      LPDWORD lpExitCode
    ); 
    第一个参数线程句柄 ,是输入值
    第二个参数是输出值,保存返回码 和STILL_ACTIVE  只有这两种了. 第一种表示线程已经结束了.如果还要其它的状态.只有visualassist4680 所说的自己维护一个状态变量了
      

  4.   


    GetExitCodeThread判断不出结束与否
      

  5.   

    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已经把数据处理完毕,才能再次创建.
      

  6.   

    LZ可以试试看 在
    Void CCCC::Send(CString strDA, CString strContent, int nID)
    的最后加一个全局变量m_bEnd,判断是否读写完成,从而决定是否执行再次创建.。void CCCCC::OnTimer(UINT nIDEvent) 
    {CDialog::OnTimer(nIDEvent);
    if(m_bEnd)
       OnTime();

    }
      

  7.   

    你不要调用CloseHandle(hThread);
    把hThread保存起来
    DWORD ExitCode;
    然后用GetExitCodeThread( hThread, &ExitCode); 就可以了
      

  8.   

    hThread保存成成员变量,程序退出时载CloseHandle(hThread);
      

  9.   


    这样好像是不行哦。试过的,目前是采用的保存一个标志来判断线程中的function是否执行完毕。
      

  10.   

    应该有一个API能够取得线程的状态吧,不然那些杀毒程序怎么能获得系统中的线程状态
      

  11.   

    if(GetExitCodeThread(hThread, dwExitCode))
    {
     if(STILL_ACTIVE == dwExitCode)
     {
       //线程还在运行
     }
     else
     {
       //线程结束
     }
    }
    当然也可以用WaitForSingleObject来判断
    WaitForSingleObject(hThread,INFINITE);
    只有当线程结束的时候,信号量才有信号
      

  12.   

    你是不是不会用GetExitCodeThreadExitCode 和STILL_ACTIVE比较