WaitForSingleObject和CEvent用法

來源:互聯網
上載者:User

標籤:blog   http   使用   sp   for   on   資料   div   log   

WaitForSingleObject函數用來檢測hHandle事件的訊號狀態,當函數的執行時間超過dwMilliseconds就返回,但如果參數dwMilliseconds為INFINITE時函數將直到相應時間事件變成有訊號狀態才返回,否則就一直等待下去,直到WaitForSingleObject有返回直才執行後面的代碼。

CEvent 類提供了對事件的支援。事件是一個允許一個線程在某種情況發生時,喚醒另外一個線程的同步對象。例如在某些網路應用程式中,一個線程(記為A)負責監聽通訊連接埠,另外一個線程(記為B)負責更新使用者資料。通過使用CEvent 類,線程A可以通知線程B何時更新使用者資料。每一個CEvent 對象可以有兩種狀態:有訊號狀態和無訊號狀態。線程監視位於其中的CEvent 類對象的狀態,並在相應的時候採取相應的操作。
  在MFC中,CEvent 類對象有兩種類型:人工事件和自動事件。一個自動CEvent 對象在被至少一個線程釋放後會自動返回到無訊號狀態;而人工事件對象獲得訊號後,釋放可利用線程,但直到調用成員函數ReSetEvent()才將其設定為無訊號狀態。在建立CEvent 類的對象時,預設建立的是自動事件。 CEvent 類的各成員函數的原型和參數說明如下:

 1、CEvent(BOOL bInitiallyOwn=FALSE, BOOL bManualReset=FALSE, LPCTSTR lpszName=NULL, LPSECURITY_ATTRIBUTES lpsaAttribute=NULL);

 

  • bInitiallyOwn:指定事件對象初始化狀態,TRUE為有訊號,FALSE為無訊號;
  • bManualReset:指定要建立的事件是屬於人工事件還是自動事件。TRUE為人工事件,FALSE為自動事件;
  • 後兩個參數一般設為NULL,在此不作過多說明。
 2、BOOL CEvent::SetEvent();

  將 CEvent 類對象的狀態設定為有訊號狀態。如果事件是人工事件,則 CEvent 類對象保持為有訊號狀態,直到調用成員函數ResetEvent()將其重新設為無訊號狀態時為止。如果CEvent 類對象為自動事件,則在SetEvent()將事件設定為有訊號狀態後,CEvent 類對象由系統自動重設為無訊號狀態。

如果該函數執行成功,則返回非零值,否則返回零。

 3、BOOL CEvent::ResetEvent();

  該函數將事件的狀態設定為無訊號狀態,並保持該狀態直至SetEvent()被調用時為止。由於自動事件是由系統自動重設,故自動事件不需要調用該函數。如果該函數執行成功,返回非零值,否則返回零。我們一般通過調用WaitForSingleObject函數來監視事件狀態。前面我們已經介紹了該函數。由於語言描述的原因,CEvent 類的理解確實有些難度,但您只要通過仔細玩味下面常式,多看幾遍就可理解

例子:

CEvent g_faxEvent(TRUE);

DWORD WINAPI GetMessageCenterNum(void *p)
{
WaitForSingleObject(g_faxEvent, INFINITE);
g_faxEvent.ResetEvent();

/////////////////////////////////////////////

要保護的代碼

////////////////////////////////////////////
   g_faxEvent.SetEvent();
return 0;
}

轉自:http://blog.sina.com.cn/s/blog_64274d080100vfx0.html

WaitForSingleObject和CEvent用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.