我创建了3个类似的线程
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread1, this, 0, NULL);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread2, this, 0, NULL);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread3, this, 0, NULL);UINT WorkThread1(LPVOID wParam)
{ HANDLE Signals[3];
Signals[0]=hEvent0;
Signals[1]=hEvent1;
Signals[2]=hEvent2;
while(1)
{

DWORD res; 
res=WaitForMultipleObjects(3,Signals,FALSE,-1);
res -= WAIT_OBJECT_0 ;
if(res != 0)
break;

......
}
return 1;
}
不知道如何通过事件来控制每个线程的启动和停止,
比如我要执行WorkThread1,停止WorkThread2
hEvent0 = CreateEvent(NULL, FALSE, FALSE, NULL);
hEvent1 = CreateEvent(NULL, FALSE, FALSE, NULL);
hEvent2 = CreateEvent(NULL, FALSE, FALSE, NULL);

解决方案 »

  1.   

    DWORD SuspendThread(
      HANDLE hThread   // handle to the thread
    );
    DWORD ResumeThread(
      HANDLE hThread   // identifies thread to restart
    );
      

  2.   

    HANDLE hThread  = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread1, this, 0, NULL);
      

  3.   

    你用CreateThread()返回一个线程的句柄
    如你上面的
    HANDLE hThread1=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread1, this, 0, NULL);
    想要暂停它用SuspendThread(hThread1);
    恢复运行用ResumeThread(hThread1)
    就可以了
      

  4.   

        pSendfileThread = AfxBeginThread(pSendFile, NULL, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL); pSendfileThread->ResumeThread();//开始
    pSendfileThread->SuspendThread//挂起
      

  5.   

    我想用EVENT来控制,能否指教一下
      

  6.   

    如果就是这样控制那很就单:如果要运行1,则
    th2.SuspendThread();
    th3.SuspendThread();
    th1.ResumeThread();