API串口通信實例_第1頁
API串口通信實例_第2頁
API串口通信實例_第3頁
API串口通信實例_第4頁
API串口通信實例_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、作。常用函數(shù)及作用下:函數(shù)名CreateFileGetCommStateSetCommStateBuilderCommDCBGetCommTimeoutsSetCommTimeoutsSetCommMaskWaitCommEventWaitForMultipleObjectsWriteFileReadFileGetOverlappedResultPurgeCommClearCommErrorCloseHandle第一節(jié)實現(xiàn)串口通訊的函數(shù)及串口編程簡介API函數(shù)不僅提供了打開和讀寫通訊端口的操作方法,還提供了名目繁多的函數(shù)以支持對串行通訊的各種操作用打開串口檢測串口設置設置串口用字符串中的值來填

2、充設備控制塊檢測通信超時設置設置通信超時參數(shù)設定被監(jiān)控事件等待被監(jiān)控事件發(fā)生等待多個被監(jiān)測對象的結果發(fā)送數(shù)據(jù)接收數(shù)據(jù)返回最后重疊(異步)操作結果清空串口緩沖區(qū),退出所有相關操作更新串口狀態(tài)結構體,并清除所有串口硬件錯誤關閉串行口用Windows API編寫串口程序本身是有巨大優(yōu)點的,因為控制能力會更強,效率也會更 高。API編寫串口,過程一般是這樣的:1、 創(chuàng)建串口句柄,用 CreateFile ;2、對串口的參數(shù)進行設置,其中比較重要的是波特率( BaudRate),數(shù)據(jù)寬度(BytesBits ),奇偶 校驗(Parity ),停止位(StopBits ),當然,重要的還有端口號( Por

3、t );3、 然后對串口進行相應的讀寫操作,這時候用到ReadFile和WriteFile 函數(shù);4、 讀寫結束后,要關閉串口句柄,用 CloseFile 。下面依次講述各個步驟的過程。第二節(jié)創(chuàng)建串口句柄打開串口從字面上去理解,大家也可以發(fā)現(xiàn)CreateFile 實際上表明 Windows是把串口當作一個文件來處理的,所以它也有文件那樣的緩沖區(qū)、句柄、讀寫錯誤等,不同的是,這個文件名字只有固定的幾個(一般為四個),而且始終存在(EXSITING),而且在調用 CreateFile的時候請注意它的參數(shù)。CreateFile 函數(shù)原型如下:HANDLE CreateFile(LPCTSTR IpF

4、ileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES IpSecurityAttributes,DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile );lpFileName :指向一個以 NULL結束的字符串,該串指定了要創(chuàng)建、打開或截斷的文件、管道、通信源、磁盤設備或控制臺的名字。當用CreateFile 打開串口時,這個參數(shù)可用“ COM1指定串口1,用“COM2指定串口 2,依此類推。dwDesire

5、Access :指定對文件訪問的類型,該參數(shù)可以為GENERIC_READg定對該文件的讀訪問權)或GENERIC_WRITE指定該文件的寫訪問權)兩個值之一或同時為為這兩個值。用ENERIC_READ|GENERIC_WRITE則指定可對串口進行讀寫;dwShareMode:指定此文件可以怎樣被共享。因為串行口不支持任何共享模式,所以dwShareMode必須設為lpSecurityAttributes定義安全屬性,一般不用,可設為 NULL Win 9x下該參數(shù)被忽略;dwCreationDistribution定義文件創(chuàng)建方式,對串口必須設為 OPEN_EXISTING表示打開已經(jīng)存在的

6、文件;dwFlagsAndAttributes 為該文件指定定義文件屬性和標志,這個程序中設為FILE_FLAG_OVERLAPPE昧示異步通信方式;hTemplateFile指向一個模板文件的句柄,串口無模板可言,設為 NULL在 Windows 9x下該參數(shù)必須為 NULL串口被成功打開時,返回其句柄,否則返回INVALID_HANDLE_value(0XFFFFFFFF)。上面說到了異步,那什么是異步呢?異步是相對同步這個概念而言的。異步,就是說,在進行串口讀寫操作時,不用等到 I/O操作完成后函數(shù)才返回,也就是說,異步可以更快得 響應用戶操作;同步,相反,響應的 I/O操作必須完成后函

7、數(shù)才返回,否則阻塞線程。對于一些很簡單的通訊程序來說,可以選擇同步,這樣可以省去很多錯誤檢查,但是對于復雜一點的應用程序, 異步是最佳選擇。實例1:/*example1.cpp */* lishaoan 2009-06-29 */ /* */ #include <windows.h>#include <stdio.h>打開串口#include <stdlib.h> bool openport(char *portname)/HANDLE hComm;hComm = CreateFile(portname, / 串口號GENERIC_READ | GENERI

8、C_WRITE, / 允許讀寫0, / 通訊設備必須以獨占方式打開0, / 無安全屬性OPEN_EXISTING, /通訊設備已存在FILE_FLAG_OVERLAPPED,/異步 I/O0); /通訊設備不能用模板打開if (hComm = INVALID_HANDLE_VALUE)CloseHandle(hComm);return FALSE;elsereturn true; void main()bool open;open=openport("com2");if(open)printf("open comport success");system

9、("pause");/* program end*/實例2:I*example2.cpp*/* lishaoan 2009-06-29 */ /* * #include <windows.h>#include<stdio.h>#include<stdlib.h>bool openport(char *portname)/HANDLE hComm;打開串口hComm = CreateFile(portname, / 串口號GENERIC_READ | GENERIC_WRITE, / 允許讀寫0, / 通訊設備必須以獨占方式打開0, / 無

10、安全屬性OPEN_EXISTING, /通訊設備已存在0,/ 同步 I/O0); /通訊設備不能用模板打開if (hComm = INVALID_HANDLE_VALUE)CloseHandle(hComm);return FALSE;elsereturn true; void main() bool open;open=openport("com2");if(open)printf("open comport success");system("pause");/* program end*/第三節(jié)設置串口在打開通信設備句柄后,常常

11、需要對串行口進行一些初始化工作。這需要通過一個DC隹吉構來進行。DCB結構包含了諸如波特率、每個字符的數(shù)據(jù)位數(shù)、奇偶校驗和停止位數(shù)等信息。在查詢或配置串口的屬性時,都要用DC隹吉構來作為緩沖區(qū)。第一次打開串口時,串口設置為系統(tǒng)默認值,函數(shù) GetCommState和SetCommState可用于檢索和設定端口設置的DCB假備控制塊)結構,該結構中BaudRate、ByteSize、StopBits和Parity 字段含有串口波特率、數(shù) 據(jù)位數(shù)、停止位和奇偶校驗控制等信息。程序中用DCB進行串口設置時,應先調用 API函數(shù)GetCommState,來獲得串口的設置信息:GetCommState(

12、)用途:取得串口當前狀態(tài) 原型:BOOL GetCommState(HANDLE hFile, LPDCB lpDCB);參數(shù)說明:-hFile :串口句柄-lpDCB:設備控制塊(Device Control Block) 結構地址。此結構中含有和設備相關的參數(shù)。此處是與串口相 關的參數(shù)。由于參數(shù)非常多,當需要設置串口參數(shù)時,通常是先取得串口的參數(shù)結構,修改部分參數(shù)后再將 參數(shù)結構寫入。然后在需要設置的地方對dcb進行設置。串口有很多的屬性,上面也已經(jīng)介紹了一些最重要的參數(shù)。這里介紹數(shù)據(jù)結構DCBtypedef struct _DCB / dcbDWORD DCBlength;/DCB 結構

13、體大小DWORD BaudRate;/ 波特率DWORD fBinary: 1;/是否是二進制,一般設置為 TRUEDWORD fParity: 1;/是否進行奇偶校驗DWORD fOutxCtsFlow:1; /CTS線上的硬件握手DWORD fOutxDsrFlow:1; /DSR線上的硬件握手DWORD fDtrControl:2; /DTR 控制DWORD fDsrSensitivity:1;DWORD fTXContinueOnXoff:1;DWORD fOutX: 1;DWORD fInX: 1;/是否使用XON/XOF勒議/是否使用XON/XOFFB議DWORD fErrorCh

14、ar: 1;/發(fā)送錯誤協(xié)議DWORD fNull: 1;DWORD fRtsControl:2;DWORD fAbortOnError:1;DWORD fDummy2:17;WORD wReserved;WORD XonLim; /設置在XO”符發(fā)送之前inbuf中允許的最少字節(jié)數(shù)WORD XoffLim; /在發(fā)送XOFF字符之前outbuf中允許的最多字節(jié)數(shù)BYTE ByteSize; / 數(shù)據(jù)寬度,一般為 8,有時候為7BYTE Parity; / 奇偶校驗BYTE StopBits; / 停止位數(shù)char XonChar; /設置表示XON?符的字符,一般是采用0x11這個數(shù)值char

15、 XoffChar; /設置表示XOFF字符的字符,一般是采用0x13這個數(shù)值char ErrorChar;char EofChar;char EvtChar;WORD wReserved1; DCB;我們真正在串口編程中用到的數(shù)據(jù)成員沒有幾個,在此僅介紹少數(shù)的幾個常用的參數(shù):DWORD BaudRate 串口波特率DWORD fParity :為1的話激活奇偶校驗檢查DWORD Parity :校驗方式,值 04分別對應無校驗、奇校驗、偶校驗、校驗置位、校驗清零DWORD ByteSize: 一個字節(jié)的數(shù)據(jù)位個數(shù),范圍是 58DWORD StopBits :停止位個數(shù),02分別對應1位、1.

16、5位、2位停止位然后再末尾調用 SetCommState就可以了,還是比較方便的。這樣可不必構造一個完整的DC隹吉構SetCommState()用途:設置串口狀態(tài),包括常用的更改串口號、波特率、奇偶校驗方式、數(shù)據(jù)位數(shù)等原型:BOOL SetCommState(HANDLE hFile, LPDCB lpDCB);參數(shù)說明:-hFile: 串口句柄-lpDCB:設備控制塊(Device Control Block)結構地址。要更改的串口參數(shù)包含在此結構中。然后調用SetCommMask用來指定程序接收特定的串口事件,調用SetupComm函數(shù),設置串口緩沖區(qū)大小:SetCommMask()說明:

17、用途:設置串口通信事件。原型:BOOL SetCommMask(HANDLE hFile,DWORD dwEvtMask);參數(shù)說明:-hFile :串口句柄-dwEvtMask :準備監(jiān)視的串口事件掩碼該參數(shù)有如下信息掩碼位值:EV_BREAK收到 BREAK言號EV_CTS:CTS(clear to send)線路發(fā)生變化EV_DSR:DST(Data Set Ready)線路發(fā)生變化EV ERR線路狀態(tài)錯誤,包括了 CE FRAMECE OVERRUNCE RXPARITY3昔誤。EV_RING:檢測到振鈴信號。EV_RLSD:CD(Carrier Detect)線路信號發(fā)生變化。EV_

18、RXCHARt入緩沖區(qū)中已收至ij數(shù)據(jù)。EV_RXFLAG#用SetCommState()函數(shù)設置的 DCB吉構中的等待字符已被傳入輸入緩沖區(qū)中。EV_TXEMPT輸出緩沖區(qū)中的數(shù)據(jù)已被完全送出。還有,串口因為是I/O操作,可能會產生錯誤,這時候需要用 SetCommTimeouts ()設置超時限制,以避免阻塞現(xiàn)象。設置超時設置需要一個結構體COMMTIMEOUTSSetCommTimeouts ()BOOL SetCommTimeouts( hCommDev, lpctmo );Lpctmo指向包含新的超時參數(shù)的COMMTIMEOUTS構。COMMTIMEOUTS勾定義如下: typede

19、f struct _ COMMTIMEOUTSDWORD ReadIntervalTimeout;DWORD ReadTotalTimeoutMultiplier;DWORD ReadTotalTimeoutconstant;DWORD WriteTotalTimeoutMultiplier;DWORD WriteTotalTimeoutconstant;COMMTIMEOUT S LPCOMMTIMEOUTS;ReadIntervalTimeout :以毫秒為單位指定通信線上兩個字符到達之間的最大時間。在ReadFile操作其間,收到第一個字符時開始計算時間。若任意兩個字符到達之間的間隔超過

20、這個最大值,ReadFile操作完成,返回緩沖數(shù)據(jù)。0值表示不用間隔限時。若該成員為MAXDWORD! ReadTotalTimeoutconstant和 ReadTotalTimeoutMultiplier成員為零,則指出讀操作要立即返回已接收到的字符,即使未收到字符,讀操作也要返回。ReadTotalTimeoutMultiplier :以毫秒為單位指定一個乘數(shù),該乘數(shù)用來計算讀操作的總限時時間。每個讀 操作的總限時時間等于讀操作所需的字節(jié)數(shù)與該值的乘積。ReadTotalTimeoutConstant :以毫秒為單位指定一個常數(shù),用于計算讀操作的總限時時間。每個操作的總限時時間等于Rea

21、dTotalTimeoutMultiplier成員乘以讀操作所需字節(jié)數(shù)再加上該值的和ReadTotalTimeoutMultiplier WriteTotalTimeoutMultiplier ReadTotalTimeoutMultiplier 舉例:COMMTIMEOUTS timeouts;和 ReadTotalTimeoutConstant和 WriteTotalTimeoutconstant和 ReadTotalTimeoutConstant成員的值為0表示讀操作不使用限時時間。的意義和作用分別與相似,不再重復。timeouts.ReadIntervalTimeout=MAXDWOR

22、D;timeouts.ReadTotalTimeoutConstant=0;timeouts.ReadTotalTimeoutMultiplier=0;timeouts.WriteTotalTimeoutConstant=50;timeouts.WriteTotalTimeoutMultiplier=2000;SetCommTimeouts(m_hCom, &timeouts);這里將 ReadIntervalTimeout設置為最大字節(jié)數(shù),.ReadTotalTimeoutConstant 和ReadTotalTimeoutMultiplier都設置為0,表示不設置讀操作超時,也就是

23、說讀操作瞬間完成,不進行等待。調用PurgeCommg數(shù)可以終止正在進行的讀寫操作,該函數(shù)還會清除輸入或輸出緩沖區(qū)中的內容。PurgeComm()說明:功能:終止目前正在進行的讀或寫的動作函數(shù)原型:BOOL PurgeComm(HANDLE hFile, / handle of communications resourceDWORD dwFlags / action to perform);參數(shù)說明:HANDLE hFile,/ 串口名稱字符串dwFlags 共有四種 flags:PURGE_TXABO頸止目前正在進行的(背景)寫入動作PURGE_RXABORT正目前正在進行的(背景)讀取動

24、作PURGE_TXCLEAR: flush 寫入的 bufferPURGE_TXCLEAR: flush 讀取的 buffer實例3:/*example3.cpp*/* lishaoan 2009-06-29 */ /* */ #include <windows.h>#include<stdio.h>#include<stdlib.h>打開串口bool openport(char *portname)/HANDLE hComm;串口號hComm = CreateFile(portname, /GENERIC_READ | GENERIC_WRITE, / 允

25、許讀寫0, /通訊設備必須以獨占方式打開0, /無安全屬性OPEN_EXISTING, /通訊設備已存在0,/ 同步 I/O0); /通訊設備不能用模板打開if (hComm = INVALID_HANDLE_VALUE)CloseHandle(hComm);return FALSE;elsereturn true;bool setupdcb(int rate_arg)/設置 DCBDCB dcb;int rate= rate_arg;memset(&dcb,0,sizeof(dcb);if(!GetCommState(hComm,&dcb)/獲取當前 DCB配置return

26、FALSE;/ set DCB to configure the serial port dcb.DCBlength= sizeof(dcb);/*Serial Port Config*/dcb.BaudRatedcb.Paritydcb.fParity dcb.StopBits dcb.ByteSize dcb.fOutxCtsFlow dcb.fOutxDsrFlow dcb.fDtrControldcb.fDsrSensitivity = 0;dcb.fRtsControldcb.fOutXdcb.fInX/*misc parameters */dcb.fErrorChardcb.fBi

27、nary=rate;=NOPARITY;=0;=ONESTOPBIT;=8;=0;=0;=DTR_CONTROL_DISABLE;=RTS_CONTROL_DISABLE;=0;=0;=0;=1;=0;dcb.fNull dcb.fAbortOnError = 0;dcb.wReserved= 0;dcb.XonLim= 2;dcb.XoffLim= 4;dcb.XonChar= 0x13;dcb.XoffChar= 0x19;dcb.EvtChar= 0;/ set DCBif(!SetCommState(hComm,&dcb)return false;elsereturn true

28、;bool setuptimeout(DWORD ReadInterval,DWORD ReadTotalMultiplier,DWORD ReadTotalconstant,DWORDWriteTotalMultiplier,DWORD WriteTotalconstant)COMMTIMEOUTS timeouts;timeouts.ReadIntervalTimeout=ReadInterval;timeouts.ReadTotalTimeoutConstant=ReadTotalconstant;timeouts.ReadTotalTimeoutMultiplier=ReadTotal

29、Multiplier;timeouts.WriteTotalTimeoutConstant=WriteTotalconstant;timeouts.WriteTotalTimeoutMultiplier=WriteTotalMultiplier;if(!SetCommTimeouts(hComm, &timeouts)return false;elsereturn true;void main()bool open;open=openport("com2");if(open)printf("open comport success");if(se

30、tupdcb(9600)printf("setupDCB success'n");if(setuptimeout(0,0,0,0,0)printf("setuptimeout successn");SetCommMask(hComm, EV_RXCHAR);/當有字符在inbuf中時產生這個事件清除串口的所有操作PurgeComm(hComm,PURGE_RXCLEAR|PURGE_TXCLEAR|PURGE_RXABORT|PURGE_TXABORT);system("pause"); /* program end*/第四節(jié)

31、 讀寫串口數(shù)據(jù)及關閉串口Win32API函數(shù)ReadFile和 WriteFile 支持對串行口的讀寫操作。在調用 ReadFile和WriteFile 之前,線程應該調用ClearCommError函數(shù)清除錯誤標志。該函數(shù)負責報告指定的錯誤和設備的當前狀態(tài)。ClearCommError()用途:清除串口錯誤或者讀取串口現(xiàn)在的狀態(tài)原型:BOOL ClearCommError(HANDLE hFile,LPDWORD lpErrors,LPCOMATAT lpStat);參數(shù)說明:-hFile: 串口句柄-lpErrors :返回錯誤數(shù)值,錯誤常數(shù)如下:1-CE_BREAK:檢測到中斷信號。意思

32、是說檢測到某個字節(jié)數(shù)據(jù)缺少合法的停止位。2-CE_FRAME硬件檢測到幀錯誤。3-CE_IOE:通信設備發(fā)生輸入/輸出錯誤。4-CE_MODE設置模式錯誤,或是 hFile值錯誤。5-CE_OVERRUN出錯誤,緩沖區(qū)容量不足,數(shù)據(jù)將丟失。6-CE_RXOVE畸出錯誤。7-CE_RXPARITY:硬件檢查到校驗位錯誤。8-CE_TXFULL:發(fā)送緩沖區(qū)已滿。-lpStat:指向通信端口狀態(tài)的結構變量,原型如下:typedef struct _COMSTATDWORD cbInQue;/輸入緩沖區(qū)中的字節(jié)數(shù)DWORD cbOutQue;/輸出緩沖區(qū)中的字節(jié)數(shù)COMSTAT,*LPCOMSTAT;

33、該結構中對我們很重要的只有上面兩個參數(shù),其他的我們可以不用管。假如當前串口中有5個字節(jié)數(shù)據(jù)的話,那么執(zhí)行完 ClearCommError()函數(shù)后,ComStat結構中的ComStat.cbInQue將被填充為5,此值在ReadFile函數(shù)中可被直接利用。例如:COMSTAT ComStat;DWORD dwError=0;ClearCommError(hComm,&dwError,&ComStat);上式執(zhí)行完后,ComStat.cbInQue就是串口中當前含有的數(shù)據(jù)字節(jié)個數(shù),我們利用此數(shù)值就可以用 ReadFile()函數(shù)去讀串口中的數(shù)據(jù)了。函數(shù)ReadFile和Write

34、File的行為還受是否使用異步I/O (Overlapped )及通信超時設置的影響。串行口讀寫的同步、異步方式是在打開端口的同時給dwGlagsAndAttributes參數(shù)傳入適當?shù)闹刀O定的。WriteFile()用途:向串口寫數(shù)據(jù)原型:BOOL WriteFile(HANDLE hFile,LPCVOID lpBuffer,DWORD nNumberOfBytesToWrite,LPDWORD lpNumberOfBytesWritten,LPOVERLAPPED lpOverlapped);參數(shù)說明:-hFile :串口句柄-lpBuffer :待寫入數(shù)據(jù)的首地址-nNumberOf

35、BytesToWrite :待寫入數(shù)據(jù)的字節(jié)數(shù)長度-lpNumberOfBytesWritten :函數(shù)返回的實際寫入串口的數(shù)據(jù)個數(shù)的地址,利用此變量可判斷實際寫入的字 節(jié)數(shù)和準備寫入的字節(jié)數(shù)是否相同。-lpOverlapped: 重疊I/O結構的指針ReadFile()用途:讀串口數(shù)據(jù)原型:BOOL ReadFile(HANDLE hFile,LPVOID lpBuffer,DWORD nNumberOfBytesToRead,lpNumberOfBytesRead,lpOverlapped);參數(shù)說明:-hFile :串口句柄-IpBuffer :存儲被讀出數(shù)據(jù)的首地址-nNumberOf

36、BytesToRead :準備讀出的字節(jié)個數(shù)-NumberOfBytesRead :實際讀出的字節(jié)個數(shù)-IpOverlapped :異步 I/O 結構在同步方式下,調用 ReadFile或WriteFile 后,當實際讀寫操作完成或發(fā)生超時時才返回調用程序。而異步方式函數(shù)在啟動接收或發(fā)送過程后立即返回,程序繼續(xù)向下執(zhí)行,程序在調用ReadFile和WriteFile時必須提供一個 Overlapped數(shù)據(jù)結構指針,該結構中包含一個手動事件同步對象,其后的程序必須借助于 該事件同步對象,完成數(shù)據(jù)的接收和發(fā)送過程。通信端口的超時設置對讀寫的處理方式也會產生影響,如果調用讀寫函數(shù)時發(fā)生端口超時,則讀

37、寫函數(shù)立即返回并返回已傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)。ReadFile函數(shù)只要在串行口輸入緩沖區(qū)中讀入指定數(shù)量的字符,就算完成操作。而WriteFile 函數(shù)不但要把指定數(shù)量的字符拷入到輸出緩沖中,而且要等這些字符從串行口送出去后才算完成操作。如果不再使用某一端口,須將該端口關閉,以便其他程序可以使用該端口。如果不顯式關閉某端口,當程序退出時打開的端口也將被自動關閉。但為了安全起見,最好是顯式的關閉它。關閉串口的語句為 CloseHandle()。CloseHandle()用途:關閉串口原型:BOOL CloseHandle(HANDLE hObjedt)說明:-hObjedt :串 口句柄操作說明:成功關

38、I串口時返回true,否則返回false當ReadFile和WriteFile 返回FALSE時,不一定就是操作失敗,線程應該調用 GetLastError 函數(shù)分析返回的結果。例如,在重疊操作時如果操作還未完成函數(shù)就返回,那么函數(shù)就返回FALSE,而且GetLastError 函數(shù)返回ERROR_IO_PENDING如果GetLastError 函數(shù)返回ERROR_IO_PENDING11說明重疊操作還未完成,線 程可以等待操作完成。有兩種等待辦法:一種辦法是用象WaitForSingleObject這樣的等待函數(shù)來等待OVERLAPPED構的hEvent成員,可以規(guī)定等待的時間,在等待函數(shù)

39、返回后,調用 GetOverlappedResult 。另一種辦法是調用 GetOverlappedResult 函數(shù)等待,如果指定該函數(shù)的bWait參數(shù)為TRUE那么該函數(shù)將等待OVERLAPPED構的hEvent事件。GetOverlappedResult 可以返回一個 OVERLAPPED構來報告包括實際傳 輸字節(jié)在內的重疊操作結果。如果規(guī)定了讀/寫操作的超時,那么當超過規(guī)定時間后,hEvent成員會變成有信號的。因此,在超時發(fā)生后,WaitForSingleObject 和 GetOverlappedResult 都會結束等待。WaitForSingleObject 的 dwMilli

40、seconds 參數(shù)會規(guī)定一個等待超時,該函數(shù)實際等待的時間是兩個超時的最小值。注意GetOverlappedResult不能設置等待的時限,因此如果hEvent成員無信號,則該函數(shù)將一直等待下去GetOverlappedResult 函數(shù)調用方法如下:BOOL GetOverlappedResult(HANDLE hFile , /用CreateFile 獲得的文件句柄LPOVERLAPPED Overlapped , /指向一個在啟動重疊操作時指定的OVERLAPPE躇構(即/讀寫函數(shù)中指定的 OverLapped結構)LPDWORD lpNumberOfBytesTransferred,/實際傳輸?shù)淖止?jié)數(shù)BOOL bWait,/是否等待懸掛的重疊操作完成,若為 TRUE則此函數(shù)直到操作完成后才/返回。);OVERLAPPE躇構定義如下:typedef struct _OVERLAPPED DWORD Internal;DWORD InternalHigh;DWORD Offset;DWORD OffsetHigh;HANDLE hEvent; OVERLAPPED;如果采用異步方式

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論