开一个分线程,分线程返回一个值,主线程在开了分线程后等待2秒,如果分线程在2秒后还没有返回,则将其结束。自己则继续下去。

解决方案 »

  1.   

    WaitForSingleObject, 用新线程的句柄作为等待对象,dwMilliseconds 设为 2000不保证计时完全准确。
      

  2.   

    DWORD WINAPI ThreadProc(LPVOID lpParameter)
    {
        //子线程的代码
        return 0;
    }主现成的代码:
    //.......
    DWORD dwThreadID;
    HANDLE hThread = CreateThread(NULL, 0, ThreadProc,
        NULL, 0, &dwThreadID);
    DWORD dwTick = GetTickCount();
    while(WaitForSingleObject(hThread,0)!=WAIT_OBJECT_0
        && GetTickCount()-dwTick<2000) {
        //最多等待2秒
        Sleep(20); 
    }
    if (WaitForSingleObject(hThread,0)!=WAIT_OBJECT_0)
        TerminateThread(hThread, 0); //强制结束子线程
    CloseHandle(hThread);
      

  3.   

    就是就是,使用WaitForSingleObject时直接指定2000就可以了,主线程的
    代码修改如下:
    //.......
    DWORD dwThreadID;
    HANDLE hThread = CreateThread(NULL, 0, ThreadProc,
        NULL, 0, &dwThreadID);
    if (WaitForSingleObject(hThread,2000)!=WAIT_OBJECT_0)
        TerminateThread(hThread, 0); //强制结束子线程
    CloseHandle(hThread);
    //.........
      

  4.   

    主线程调用WAITFORSINGLEOBJECT();等待2秒.
    在线程退出时调用SETEVENT();
      

  5.   

    WaitForMultiObject()
    CreateThread()新的thread加一个消息循环。
    主线程等待2秒后,发过message过去
    子thread 结束。
      

  6.   

    给线成中设置一个标志位,当线成启动后,主线成等待2秒,然后判断有没有返回值,没有把标志位设置为TRUE,新开的线成自动退出。
      

  7.   

    首先定一个CWinThread *m_pThread ;
    然后再开线程的函数里:
    m_pThread = AfxCreateThread(...) ;
    SetTimer(1,2000,NULL) ;
    ...
    然后在
    Cxxxx::OnTimer()
    {
       DWORD retVal ;
       ::GetExitCodeThread(m_pThread->m_hThread,&retVal) ;
       if(retVal == STILL_ACTIVE) {
                  AfxEndThread(0,TRUE) ;
    }
       Cxxxx::OnTimer() ;
    }
    如果是GUI的,可以用
    m_pThread->PostThreadMessage(xxxx,xxx,xxx);
    这类强制退出。