4.2 同步方式讀寫串列埠:
下面先例舉同步方式讀寫串列埠的**:
//同步讀串列埠
char str[100];
dword wcount;//讀取的位元組數
bool breadstat;
breadstat=readfile(hcom,str,100,&wcount,null);
if(!breadstat)
return true;
//同步寫串列埠
char lpoutbuffer[100];
dword dwbyteswrite=100;
comstat comstat;
dword dwerrorflags;
bool bwritestat;
clearcommerror(hcom,&dwerrorflags,&comstat);
bwritestat=writefile(hcom,lpoutbuffer,dwbyteswrite,& dwbyteswrite,null);
if(!bwritestat)
purgecomm(hcom, purge_txabort|
purge_rxabort|purge_txclear|purge_rxclear);
4.3 重疊操作:
操作還未完成函式就返回。
dword internal;
dword internalhigh;
dword offset;
dword offsethigh;
handle hevent;
當呼叫readfile, writefile 函式的時候,該成員會自動被置為無訊號狀態;當重疊操作完成後,該成員變數會自動被置為有訊號狀態。
handle hfile, // 串列埠的控制代碼
// 指向乙個32位變數,該變數的值返回實際讀寫操作傳輸的位元組數。
lpdword lpnumberofbytestransferred,
// 該引數用於指定函式是否一直等到重疊操作結束。
// 如果該引數為true,函式直到操作結束才返回。
// 如果該引數為false,函式直接返回,這時如果操作沒有完成,
// 通過呼叫getlasterror()函式會返回error_io_incomplete。
bool bwait
);
4.4 非同步讀串列埠的示例**:
char lpinbuffer[1024];
dword dwbytesread=1024;
comstat comstat;
dword dwerrorflags;
m_osread.hevent=createevent(null,true,false,null);
clearcommerror(hcom,&dwerrorflags,&comstat);
dwbytesread=min(dwbytesread,(dword)comstat.cbinque);
if(!dwbytesread)
return false;
bool breadstatus;
breadstatus=readfile(hcom,lpinbuffer,
dwbytesread,&dwbytesread,&m_osread);
if(!breadstatus) //如果readfile函式返回false
return 0; }
purgecomm(hcom, purge_txabort|
purge_rxabort|purge_txclear|purge_rxclear);
return dwbytesread;
對以上**再作簡要說明:
在使用readfile 函式進行讀操作前,應先使用clearcommerror函式清除錯誤。clearcommerror函式的原型如下:bool clearcommerror(
handle hfile, // 串列埠控制代碼
lpdword lperrors, // 指向接收錯誤碼的變數
lpcomstat lpstat // 指向通訊狀態緩衝區
);
該函式獲得通訊錯誤並報告串列埠的當前狀態,同時,該函式清除串列埠的錯誤標誌以便繼續輸入、輸出操作。
引數lpstat指向乙個comstat結構,該結構返回串列埠狀態資訊。
comstat結構
comstat結構包含串列埠的資訊,結構定義如下:
typedef struct _comstat comstat, *lpcomstat;
本文只用到了cbinque成員變數,該成員變數的值代表輸入緩衝區的位元組數。
最後用purgecomm函式清空串列埠的輸入輸出緩衝區。
char lpinbuffer[1024];
dword dwbytesread=1024;
bool breadstatus;
dword dwerrorflags;
comstat comstat;
clearcommerror(hcom,&dwerrorflags,&comstat);
if(!comstat.cbinque)
return 0;
dwbytesread=min(dwbytesread,(dword)comstat.cbinque);
breadstatus=readfile(hcom, lpinbuffer,dwbytesread,
&dwbytesread,&m_osread);
if(!breadstatus) //如果readfile函式返回false
return 0; }
return dwbytesread;
非同步寫串列埠的示例**:
char buffer[1024];
dword dwbyteswritten=1024;
dword dwerrorflags;
comstat comstat;
bool bwritestat;
bwritestat=writefile(hcom,buffer,dwbyteswritten,
&dwbyteswritten,&m_oswrite);
if(!bwritestat)
return 0; }
return dwbyteswritten;
5.關閉串列埠
利用api函式關閉串列埠非常簡單,只需使用createfile函式返回的控制代碼作為引數呼叫closehandle即可:
bool closehandle(
handle hobject; //handle to object to close );
WIN32串列埠程式設計詳解 二
4.2 同步方式讀寫串列埠 下面先例舉同步方式讀寫串列埠的 同步讀串列埠 char str 100 dword wcount 讀取的位元組數 bool breadstat breadstat readfile hcom,str,100,wcount,null if breadstat return ...
Win32串列埠程式設計
win32串列埠程式設計 金貝貝 一 基本知識 win32下串列埠通訊與16位串列埠通訊有很大的區別。在win32下,可以使用兩種程式設計方式實現串列埠通訊,其一是呼叫的windows的api函式,其二是使用activex控制項。使用api 呼叫,可以清楚地掌握串列埠通訊的機制,熟悉各種配置和自由靈...
win32 串列埠 通訊 非同步 執行緒方式
該例子是 visual c 實踐與提高 串列埠通訊與工程應用篇 第2版 書上給出的部分原始碼,整理修改之後的演示 借助 tc35模組可以,正常執行 如下 seritaltk.cpp 定義控制台應用程式的入口點。include stdafx.h include handle hcom dword th...