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函式...