Windows線程(使用Event同步) 佟強 2008.10.9
- #include <stdio.h>
- #include <windows.h>
- //線程函數
- DWORD WINAPI MyThreadProc(LPVOID lpParameter);
- //使用者定義的類
- class MyThreadParam{
- public:
- void myfunc();
- };
- HANDLE ev; //事件控制代碼
- int main(int argc,char* argv[]){
- DWORD myThreadID; //線程ID
- MyThreadParam threadParam; //線程參數,可以傳遞任何類型的指標
- HANDLE h; //線程控制代碼
- //建立事件,初始為無訊號,手工重設
- ev = CreateEvent(NULL,TRUE,FALSE,"MyEventName");
- h = CreateThread(NULL, //線程屬性
- 0, //stack大小,0使用預設堆棧大小
- MyThreadProc, //線程函數
- &threadParam, //線程參數,LPVOID類型
- 0, //線程標誌
- &myThreadID //線程ID,輸出值
- );
- printf("Thread ID is %d/n",myThreadID);
- //等待事件有訊號,即等待線程結束
- WaitForSingleObject(ev,INFINITE);
- printf("Thread %d terminated!/n",myThreadID);
- //重設訊號為無訊號
- ResetEvent(ev);
- return 0;
- }
- DWORD WINAPI MyThreadProc(LPVOID lpParameter){
- MyThreadParam *param = (MyThreadParam*)lpParameter;
- for(int i=0; i<10; i++){
- param->myfunc();
- }
- //置事件為有訊號
- SetEvent(ev);
- return 0;
- }
- void MyThreadParam::myfunc(){
- printf("Hello Thread!/n");
- }