執行緒同步之事件機制基礎使用

2021-10-07 15:13:01 字數 1252 閱讀 4834

void myreceivechar(void)

{ comstat commstat;//這個結構體主要是用來獲取埠資訊的

handle hlocevent;

dword dwerror;

dword dwmask;

dword dwlength;

dword dwbytereaded;

dword i;

uint8_t byrecbuf[4096];

memset(&commstat, 0, sizeof(commstat));

hlocevent = createevent(null, true, false, null); //建立cevent物件

setevent(hlocevent); //標記事件

while(1) //若埠處於開啟狀態,則一直讀取訊息

{ clearcommerror(hcomm, &dwerror, &commstat);

if(commstat.cbinque) //如果串列埠inbuf中有接收到的字元就執行下面的操作

{

mrecbuf.dwrxend=false;

waitforsingleobject(hlocevent, infinite); //無限等待

resetevent(hlocevent); //清標記事件

//清除硬體的通訊錯誤以及獲取通訊裝置的當前狀態

clearcommerror(hcomm, &dwerror, &commstat);

dwlength = commstat.cbinque;

if(true == readfile(hcomm, byrecbuf, dwlength, &dwbytereaded, &mosread))

{for(i=0;i事件定義

handle  hlocevent;

建立事件物件

hlocevent = createevent(null, true, false, null);   

setevent(hlocevent);       //標記事件

resetevent(hlocevent);    //清標記事件

等待事件發生,包含了時間的等待

waitforsingleobject(hlocevent, infinite);    //無限等待

1.全域性變數操作不是原子操作,event是可以保證原子操作的

2.事件在等待的時候,執行緒掛起,不占用cpu資源,全域性變數需要一直查詢,一直處於忙等待

執行緒同步之事件物件

執行緒同步 讓執行緒協同步調,按照一定的先後次序來執行 當人工重置的事件得到通知時,等待該事件的所有執行緒均變為可排程執行緒。當乙個自動重置的事件得到通知時,等待該事件的執行緒中只有乙個執行緒變為可排程執行緒。參考 多執行緒與事件物件 多執行緒程式設計 13 多執行緒同步之 event 事件物件 i...

Windows執行緒同步之事件 Event

設定為有訊號狀態setevent 設定為無訊號狀態resetevent 傳送訊號脈衝pulseevent 開啟已存在的命名物件openevent 關閉事件物件closeevent 等待訊號為有訊號或超時waitforsingleobject 建立或開啟事件物件createevent event是wi...

VC之 執行緒同步之事件物件 Event

事件物件也是核心物件,它也包含三個成員 使用計數 指明事件是自動重置事件還是乙個人工重置事件的布林值 指明事件是處於已通知狀態還是處於未通知狀態。人工重置的事件物件 當人工重置的事件物件得到通知時,等待該事件物件的所有執行緒均變為可排程執行緒。在擁有事件物件的所有權之後要呼叫resetevent函式...