freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

api串口通信實(shí)例-資料下載頁

2025-06-20 06:55本頁面
  

【正文】 息隊(duì)列中,并且不等到消息被該線程處理時(shí)便返回。idThread:將接收消息的線程的ID; Msg:指定用來發(fā)送的消息; wParam:同消息有關(guān)的字參數(shù); lParam:同消息有關(guān)的長參數(shù); 調(diào)用該函數(shù)時(shí),如果即將接收消息的線程沒有創(chuàng)建消息循環(huán),則該函數(shù)執(zhí)行失敗。DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds)。hHandle為要監(jiān)視的對象(一般為同步對象,也可以是線程)的句柄;dwMilliseconds為hHandle對象所設(shè)置的超時(shí)值,單位為毫秒; 當(dāng)在某一線程中調(diào)用該函數(shù)時(shí),線程暫時(shí)掛起,系統(tǒng)監(jiān)視hHandle所指向的對象的狀態(tài)。如果在掛起的dwMilliseconds毫秒內(nèi),線程所等待的對象變?yōu)橛行盘枲顟B(tài),則該函數(shù)立即返回;如果超時(shí)時(shí)間已經(jīng)到達(dá)dwMilliseconds毫秒,但hHandle所指向的對象還沒有變成有信號狀態(tài),函數(shù)照樣返回。參數(shù)dwMilliseconds有兩個(gè)具有特殊意義的值:0和INFINITE。若為0,則該函數(shù)立即返回;若為INFINITE,則線程一直被掛起,直到hHandle所指向的對象變?yōu)橛行盘枲顟B(tài)時(shí)為止。DWORD WaitForMultipleObject(DWORD dwCount , CONST HANDLE* phObject, BOOL fWaitAll, DWORD dwMillisecinds)?! wCount參數(shù) 用于指明想要讓函數(shù)查看的內(nèi)核對象的數(shù)量。這個(gè)值必須在1與MAXIMUM_WAIT_OBJECTS(在Windows頭文件中定義為64之間.  phObjects參數(shù) 是指向內(nèi)核對象句柄的數(shù)組的指針。可以以兩種不同的方式來使用WaitForMultipleObjects函數(shù)。一種方式是讓線程進(jìn)入等待狀態(tài),直到指定內(nèi)核對象中的任何一個(gè)變?yōu)橐淹ㄖ獱顟B(tài)。另一種方式是讓線程進(jìn)入等待狀態(tài),直到所有指定的內(nèi)核對象都變?yōu)橐淹ㄖ獱顟B(tài)?! WaitAll參數(shù) 告訴該函數(shù),你想要讓它使用何種方式。如果為該參數(shù)傳遞TRUE,那么在所有對象變?yōu)橐淹ㄖ獱顟B(tài)之前,該函數(shù)將不允許調(diào)用線程運(yùn)行?! wMil liseconds參數(shù) 該參數(shù)的作用與它在WaitForSingleObject中的作用完全相同。如果在等待的時(shí)候規(guī)定的時(shí)間到了,那么該函數(shù)無論如何都會返回。同樣,通常為該參數(shù)傳遞INFINITE,但是在編寫代碼時(shí)應(yīng)該小心,以避免出現(xiàn)死鎖情況。WaitForMultipleObjects函數(shù)的返回值告訴調(diào)用線程,為什么它會被重新調(diào)度??赡艿姆祷刂凳荳AIT_FAILED和WAIT_TIMEOUT,這兩個(gè)值的作用是很清楚的。如果為f WaitAll參數(shù)傳遞TRUE,同時(shí)所有對象均變?yōu)橐淹ㄖ獱顟B(tài),那么返回值是WAIT_OBJECT_0。如果為fWaitAll傳遞FALSE,那么一旦任何一個(gè)對象變?yōu)橐淹ㄖ獱顟B(tài),該函數(shù)便返回。在這種情況下,你可能想要知道哪個(gè)對象變?yōu)橐淹ㄖ獱顟B(tài)。返回值是WAIT_OBJECT_0與(WAIT_OBJECT_0 + dwCount1)之間的一個(gè)值。換句話說,如果返回值不是WAIT_TIMEOUT,也不是WAIT_FAILED,那么應(yīng)該從返回值中減去WAIT_OBJECT_0。產(chǎn)生的數(shù)字是作為第二個(gè)參數(shù)傳遞給WaitForMultipleObjects的句柄數(shù)組中的索引。該索引說明哪個(gè)對象變?yōu)橐淹ㄖ獱顟B(tài)。通常,在寫WINDOWS程序的時(shí)候我們會用 GetLastError()來獲得錯(cuò)誤代號,進(jìn)而想要知道具體出錯(cuò)原因(文本描述),我們可以用 FormatMessage函數(shù)來得到。DWORD FormatMessage( DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPTSTR lpBuffer, DWORD nSize, va_list* Arguments )。dwFlags: FORMAT_MESSAGE_ALLOCATE_BUFFER //此函數(shù)會分配內(nèi)存以包含描述字串。 FORMAT_MESSAGE_FROM_SYSTEM, //在系統(tǒng)的id映射表中尋找描述字串 FORMAT_MESSAGE_FROM_HMODULE //在其他資源模塊中尋找描述字串 FORMAT_MESSAGE_FROM_STRING //消息ID是個(gè)字串,不是個(gè)DWORD通常為: FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM。lpSource:指定了FORMAT_MESSAGE_FROM_HMODULE的話,此參數(shù)表示模塊的HANDLE指定了FORMAT_MESSAGE_FROM_STRING的話,此參數(shù)表示id字串通常為:NULL。dwMessageId:消息ID。如果指定FORMAT_MESSAGE_FROM_STRING,將被忽略。dwLanguageId:消息描述所用的語言通常為:0表示自動選擇。lpBuffer:如果未指定FORMAT_MESSAGE_ALLOCATE_BUFFER,則為自己提供的緩沖區(qū)否則為系統(tǒng)LocalAlloc分配,需要被用戶LocalFree。nSize:如果未指定FORMAT_MESSAGE_ALLOCATE_BUFFER,則為自己提供的緩沖區(qū)大小否則為系統(tǒng)LocalAlloc分配之最小緩沖區(qū)大小。Arguments:通常不使用。如果異步操作不能立即完成的話,函數(shù)返回FALSE,并且調(diào)用GetLastError()函數(shù)分析錯(cuò)誤原因后返回ERROR_IO_PENDING,在函數(shù)返回之前系統(tǒng)設(shè)置OVERLAPPED結(jié)構(gòu)中的事件為無信號狀態(tài),該函數(shù)等待用SetCommMask()函數(shù)設(shè)置的串口事件發(fā)生,共有9種事件可被監(jiān)視:EV_BREAK,EV_CTS,EV_DSR,EV_ERR,EV_RING,EV_RLSD,EV_RXCHAR, EV_RXFLAG,EV_TXEMPTY;當(dāng)其中一個(gè)事件發(fā)生或錯(cuò)誤發(fā)生時(shí),函數(shù)將 OVERLAPPED結(jié)構(gòu)中的事件置為有信號狀態(tài),并將事件掩碼填充到dwMask參數(shù)中。 操作舉例1:OVERLAPPED os。DWORD dwMask,dwTrans,dwError=0,err。memset(amp。os,0,sizeof(OVERLAPPED))。=CreateEvent(NULL,TRUE,FALSE,NULL)。if(!WaitCommEvent(hComm,amp。dwMask,amp。os)){GetOverlappedResult(hComm,amp。os,amp。dwTrans,true)。switch(dwMask){case EV_RXCHAR:PostMessage(Parent,WM_COMM_RXCHAR,0,0)。break。case EV_TXEMPTY:PostMessage(Parent,WM_COMM_TXEMPTY,0,0)。break。case EV_ERR:switch(dwError){case CE_FRAME:err=0。break。case CE_OVERRUN:err=1。break。case CE_RXPARITY:err=2。break。default:break。}PostMessage(Parent,WM_COMM_ERR,(WPARAM)0,(LPARAM)err)。break。case EV_BREAK:PostMessage(Parent,WM_COMM_BREAK,0,0)。break。case ...://其他用SetCommMask()函數(shù)設(shè)置的被監(jiān)視的串口通信事件。 ... ...break。default:break。}}操作舉例2:COMSTAT Stat。DWORD dwErrors。BOOL fOOP, fOVERRUN, fPTO, fRXOVER, fRXPARITY, fTXFULL。BOOL fBREAK, fDNS, fFRAME, fIOE, fMODE。// Get and clear current errors on the port.if (!ClearCommError(hComm, amp。dwErrors, amp。Stat))// Report error in ClearCommError.return false。// Get error flags.fDNS = dwErrors amp。 CE_DNS。fIOE = dwErrors amp。 CE_IOE。fOOP = dwErrors amp。 CE_OOP。fPTO = dwErrors amp。 CE_PTO。fMODE = dwErrors amp。 CE_MODE。fBREAK = dwErrors amp。 CE_BREAK。fFRAME = dwErrors amp。 CE_FRAME。fRXOVER = dwErrors amp。 CE_RXOVER。fTXFULL = dwErrors amp。 CE_TXFULL。fOVERRUN = dwErrors amp。 CE_OVERRUN。fRXPARITY = dwErrors amp。 CE_RXPARITY。// COMSTAT structure contains information regarding// munications status.if ()// Tx waiting for CTS signalif ()// Tx waiting for DSR signalif ()// Tx waiting for RLSD signalif ()// Tx waiting, XOFF char rec39。dif ()// Tx waiting, XOFF char sentif ()// EOF character receivedif ()// Character waiting for Tx。 char queued with TransmitCommCharif ()// bytes have been received, but not readif ()// bytes are awaiting transferreturn true。memset函數(shù)詳細(xì)說明:void *memset(void *s,int c,size_t n)總的作用:將已開辟內(nèi)存空間 s的首 n個(gè)字節(jié)的值設(shè)為值 c。常用于內(nèi)存空間初始化。CreateEvent函數(shù)詳細(xì)說明:函數(shù)功能描述:創(chuàng)建或打開一個(gè)命名的或無名的事件對象  函數(shù)原型:  HANDLE CreateEvent(  LPSECURITY_ATTRIBUTES lpEventAttributes, //安全屬性  BOOL bManualReset, //復(fù)位方式  BOOL bInitialState, //初始狀態(tài)  LPCTSTR lpName //對象名稱  )?! ?shù):  lpEventAttributes:  [輸入]一個(gè)指向SECURITY_ATTRIBUTES結(jié)構(gòu)的指針,確定返回的句柄是否可被子進(jìn)程繼承。如果lpEventAttributes是NULL,此句柄不能被繼承?! indows NT/2000:lpEventAttributes的結(jié)構(gòu)中的成員為新的事件指定了一個(gè)安全符。如果lpEventAttributes是NULL,事件將獲得一個(gè)默認(rèn)的安全符?! ManualReset:  [輸入]指定將事件對象創(chuàng)建成手動復(fù)原還是自動復(fù)原。如果是TRUE,那么必須用ResetEvent函數(shù)來手工將事件的狀態(tài)復(fù)原到無信號狀態(tài)。如果設(shè)置為FALSE,當(dāng)事件被一個(gè)等待線程釋放以后,系統(tǒng)將會自動將事件狀態(tài)復(fù)原為無信號狀態(tài)。  bInitialState:  [輸入]指定事件對象的初始狀態(tài)。如果為TRUE,初始狀態(tài)為有信號狀態(tài);否則為無信號狀態(tài)?! pName:  [輸入]指定事件的對象的名稱,是一個(gè)以0結(jié)束的字符串指針。名稱的字符格式限定在MAX_PATH之內(nèi)。名字是對大小寫敏感的。  如果lpName指定的名字,與一個(gè)存在的命名的事件對象的名稱相同,函數(shù)將請求EVENT_ALL_ACCESS來訪問存在的對象。這時(shí)候,由于bManualReset和bInitialState參數(shù)已經(jīng)在創(chuàng)建事件的進(jìn)程中設(shè)置,這兩個(gè)參數(shù)將被忽略。如果lpEventAttributes是參數(shù)不是NULL,它將確定此句柄是否可以被繼承,但是其安全描述符成員將被忽略?! ∪绻鹟pName為NULL,將創(chuàng)建一個(gè)無名的事件對象?! ∪绻鹟pName的和一個(gè)存在的信號、互斥、等待計(jì)時(shí)器、作業(yè)或者是文件映射對象名稱相同,函數(shù)將會失敗,在GetLastError函數(shù)中將返回ERROR_INVALID_HANDLE。造成這種現(xiàn)象的原因是這些對象共享同一個(gè)命名空間?! 〗K端服務(wù)(Terminal Services):名稱中可以加入Global\或是Local\的前綴,這樣可以明確的將對象創(chuàng)建在全局的或事務(wù)的命名空間。名稱的其它部分除了反斜杠(\),可以使用任意字符。詳細(xì)內(nèi)容可參考Kernel Object Name Spaces?! indows 2000:在Windows 2000系統(tǒng)中,沒有終端服務(wù)運(yùn)行,Global\和Local\前綴將被忽略。名稱的其它部分除了反斜杠(\),可以使用任意字符。  Windows NT , Windows 95/98:名稱中除了反斜杠(\),可以使用任意字符?! 》祷刂担骸 ∪绻瘮?shù)調(diào)用成功,函數(shù)返回事件對象的句柄。如果對于命名的對象,在函數(shù)調(diào)用前已經(jīng)被創(chuàng)建,函數(shù)將返回存在的事件對象的句柄,而且在GetLastError函數(shù)中返回ERROR_ALREADY_EXISTS?! ∪绻瘮?shù)失敗,函數(shù)返回值為NULL,如果需要獲得詳細(xì)的錯(cuò)誤信息,需要調(diào)用GetLastError。備注:  調(diào)用CreateEvent函數(shù)返回的句柄,該句柄具有EVENT_ALL_ACCESS權(quán)限去訪問新的事件對象,同時(shí)它可以在任何有此事件對象句柄的函數(shù)中使用?! ≡谡{(diào)用的過程中,所有線程都可以在一個(gè)等待函數(shù)中指定事件對象句柄。當(dāng)指定的對象的狀態(tài)被置為有信號狀態(tài)時(shí),單對象等待函數(shù)將返回?! τ诙鄬ο蟮却瘮?shù),可以指定為任意或所有指定的對象被置為有信號狀態(tài)。當(dāng)?shù)却瘮?shù)返回時(shí),等待線程將被釋放去繼續(xù)運(yùn)行?! 〕跏紶顟B(tài)在bInitialState參數(shù)中進(jìn)行設(shè)置。使用SetEvent函數(shù)將事件對象的狀態(tài)置為有信號狀態(tài)。使用ResetEvent函數(shù)將事件對象的狀態(tài)置為無信號狀態(tài)。  當(dāng)一個(gè)手動復(fù)原的事件對象的狀態(tài)被置為有信號狀態(tài)時(shí),該對象狀態(tài)將一直保持有信號狀態(tài),直至明確調(diào)用ResetEvent函數(shù)將其置為無符號狀態(tài)?! ‘?dāng)事件的對象被置為有信號狀態(tài)時(shí),任意數(shù)量的等待中線程,以及隨后開始等待的線程均會被釋放?! ‘?dāng)一個(gè)自動復(fù)原的事件對象的狀態(tài)被置為有信號狀態(tài)時(shí),該對象狀態(tài)將一直保持有信號狀態(tài),直至一個(gè)等待線程被釋放。系統(tǒng)將自動將此函數(shù)置為無符號狀態(tài)。如果沒有等待線程正在等待,事件對象的狀態(tài)將保持有信號狀態(tài)?! 《鄠€(gè)進(jìn)程可持有同一個(gè)事件對象的多個(gè)句柄,可以通過使用此對象來實(shí)現(xiàn)進(jìn)程間的同步。下面的對象共享機(jī)制是可行的:  在CreateEvent函數(shù)中,lpEventAttributes參數(shù)指定句柄可被繼承時(shí),通過CreateProcess函數(shù)創(chuàng)建的子進(jìn)程繼承的事件對象句柄?! ∫粋€(gè)進(jìn)程可以在DuplicateHandle函數(shù)中指定事件對象句柄,從而獲得一個(gè)復(fù)制的句柄,此句柄可以被其它進(jìn)程使用。  一個(gè)進(jìn)程可以在OpenEvent或CreateEvent函數(shù)中指定一個(gè)名字,從而獲得一個(gè)有名的事件對象句柄?! ∈褂肅loseHandle函數(shù)關(guān)閉句柄。當(dāng)進(jìn)程停止時(shí),系統(tǒng)將自動關(guān)閉句柄。當(dāng)最后一個(gè)句柄被關(guān)閉后,事件對象將被銷毀?! ∈褂铆h(huán)境:  Windows NT/2000:  Windows 95/98:需要Windows 95或更高版本  頭文件:;需要包含 。  導(dǎo)入庫:  Unicode:在Windows NT/2000中,以 Unicode和 ANSI執(zhí)行   一個(gè)Event被創(chuàng)建以后,可以用OpenEvent()API來獲得它的Handle,用CloseHandle()  來關(guān)閉它,用SetEvent()或PulseEvent()來設(shè)置它使其有信號,用
點(diǎn)擊復(fù)制文檔內(nèi)容
物理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1