我循环产生了许多子线程,每个线程都是无限循环的,如何停止其中的某个线程?不要全停。

解决方案 »

  1.   

    你创建线程成功后会得到线程句柄
    想要暂停某个线程就只要象下面这样HANDLE hThread=AfxBeginThread(MyProc,NULL); DWORD count=hThread->SuspendThread();//暂停线程
      

  2.   

    刚才写错了CWinThread *hThread=AfxBeginThread(MyProc,NULL); DWORD count=hThread->SuspendThread();//暂停线程
      

  3.   

    在循环内最好有空闲,Sleep(1)
    效果会很好,不仅可以很快Terminate而且还能Suspend
      

  4.   

    针对没个线程建一个事件对象,保存在一个数组中,如:
    HANDL hEvent[n];
    for( int i = 0; i < n; i++ )
    {
        hEvent = CreateEvent(NULL, TRUE, TRUE, NULL);
    }假如第k个线程:
    DWORD g_dwTimeout = INFINITE;
    while( WaitForSingleObject(hEvent[k],g_TimeOut) == WAIT_OBJECT_0 )
    {
        //do what you want
    }如果要暂停停第k个线程
    ResetEvent( hEvent[k] );
    启动进程:
    SetEvent( hEvent[k] );
    结束线程:
    g_dwTimeout = 0;
    ResetEvent( hEvent[k] );
      

  5.   

    你可以定义一个 EVENT 数组,一个线程对应一个 EVENT。创建EVENT数组 和 线程组。每个EVENT 设置为nonsignaled. --Reset(hEvent[i]);在你的每个线程里检测他所对应的EVENT,
    如果 EVENT is signaled, 此线程就终止循环,自动退出。
    --IF (WaitForSingleObject(hEvent[i],0)==WAIT_OBJECT_0)
    --  return;此时你就可以随你停止你想要停止的线程了。。
    -- SetEvent(hEvent[i]) /*假设hEvent[i]是你想要停止的线程对应的Event*/
      

  6.   

    最简单的办法,你设一个全局变量,比如 bool bFlag = true;
    在线程体中不要死循环,而写成 while(bFlag){}
    这样你想停止时,只需要 bFlag = false;就OK了
      

  7.   

    数组好象不是太好,用NEW如何?