国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
VC知識庫文章 - 學(xué)習(xí)多線程之一:線程通信--利用事件對象

學(xué)習(xí)多線程之一:線程通信--利用事件對象
作者:惠州市東曉電子有限公司 龔輝斌

下載本文示例代碼

在線程之間傳送信號可以使用事件對象,用MFC的CEvent來表示。一個事件對象有兩種狀態(tài):信號態(tài)與非信號態(tài)。線程能監(jiān)視于信號態(tài)的事件,以便在適當(dāng)?shù)臅r間完成對事件的操作。



創(chuàng)建事件的語句如下:

CEvent ThreadBegin;
事件被創(chuàng)建后就自動處于非信號態(tài),要使用它處于信息態(tài),必須使用對件對象的成員函數(shù)SetEvent(),即:
ThreadBegin.SetEvent();
線程監(jiān)視這個信號來知道事件已準(zhǔn)備就緒,從而可以進(jìn)行其它的操作。而線程通過調(diào)用API函數(shù)WaitForSingleObject()來監(jiān)視這個信號。
::WaitForSingleObject(ThreadBegin.m_hObject,INFINITE);
該函數(shù)的兩個參數(shù)分別表示要檢查的事件句柄與函數(shù)等待事件時間。

INFINITE告訴WaitForSingleObject()在特定的事件不處于信號態(tài)時不要返回,即把它放在線程的開始的話,那么系統(tǒng)將掛起這個線程,直到事件處于信號態(tài)時才繼續(xù)執(zhí)行下去。當(dāng)已經(jīng)準(zhǔn)備好線程繼續(xù)執(zhí)行下去的條件時,調(diào)用SetEvent(),當(dāng)線程獲得了相應(yīng)信號態(tài)信號后便會繼續(xù)執(zhí)行下去。

一旦線程不再被掛起時,它便可以完成相關(guān)事務(wù)。但若要在主程序中通過線程結(jié)束,那么線程必須監(jiān)視接下來的這個事件,看它是否處于信號態(tài)。線程可以通過對事件進(jìn)行輪詢,這時只要調(diào)用WaitForSingleObject()即可,只是等待時間參數(shù)的值被置為0,即:

::WaitForSingleObject(ThreadBegin.m_hObject,0);

當(dāng)返回WAIT_OBJECT_0時,表示事件處于信號態(tài),否則處于非信號態(tài)。

UINT ThreadProc(LPVOID param){::WaitForSingleObject(ThreadBegin.m_hObject,INFINITE);::MessageBox((HWND)param,"Thread Activated!","Thread",MB_OK);BOOL KeepRunning=true;while (KeepRunning){int Result=::WaitForSingleObject(ThreadEnd.m_hObject,0);if (Result==WAIT_OBJECT_0)KeepRunning=false;}::MessageBox((HWND)param,"Thread Stopped!","Thread",MB_OK);return 0;}

啟動線程則用如下代碼:
HWND hWnd=GetSafeHwnd();AfxBeginThread(ThreadProc,hWnd);ThreadBegin.SetEvent();
本文即本人在學(xué)習(xí)多任務(wù)多線程過程的手記,供大家參考,望能得到各位指點。
作者信箱:devvy@21cn.com
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
CEvent類祥解
CreateEvent的使用方法學(xué)習(xí)
VC線程同步方法
VC 線程間通信
多線程同步-event
setEvent()
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服