全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3566
推到 Plurk!
推到 Facebook!

請問在 Vista下用 CreateFile() 開啟 SerialPort

答題得分者是:JustinShen
kabaeva
一般會員


發表:1
回覆:2
積分:0
註冊:2007-10-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-02 17:52:22 IP:220.134.xxx.xxx 訂閱
我正在寫一個程式要透過開啟 COM PORT 去把資料傳給 Bluetooth 的裝置。在 XP 上都可以正常的運作但是到 vista後,發生的情況很怪,我程式開啟後通常只有第一次可以成功把我的資料透過 COM PORT 送過去(有時候 timeout),只要成功送過一次資料後,就可以開始看 bluetooth 接收/傳送資料。但是bluetooth 斷線後,再開啟,我就無法 成功開啟 CreateFile() ,但是程式一重開,又會像一開始一樣可以成功使用CreateFile()開啟  COM port。感覺很像是我程是咬住 port 但是我不知道是甚麼原因 ? 我的 errcode = 5 這是權限出錯但是我不知道哪邊會有這樣的問題 ,而且我也有用管理者權限去跑。請問有人有類似的經驗嗎 ?

我的code :
handle_ = ::CreateFile(devicename.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED | FILE_FLAG_NO_BUFFERING, NULL);
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-16 10:44:57 IP:222.188.xxx.xxx 訂閱
我猜还是你的程式在断线后没有释放资源的缘故,所以必须关闭整个程式才可以再次正常使用。好像Vista即使在Buff中有一个字符没有Send出去就要Cancel之后再关闭Com port好像才可以释放资源。
不知道这样理解对不对。
------
====================
我为一切作努力!
Justin Shen

kabaeva
一般會員


發表:1
回覆:2
積分:0
註冊:2007-10-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-10-16 15:22:03 IP:140.115.xxx.xxx 訂閱
謝謝你的回復,我用一些方法但是都無法很保握得確定是 buff 沒清乾淨或是有東西在裡面。
可以請問一下通常 用createfile() 這樣開 com port 來用的,我該用怎樣的方法去清 buff ? 或是 我有辦法可以去確認現在有沒有資料再 buff ?
謝謝。
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-10-17 09:10:26 IP:222.188.xxx.xxx 訂閱
我注意到你打开Com port时候用到 FILE_FLAG_NO_BUFFERING 和 FILE_FLAG_OVERLAPPED 目的应该是更好地同步,但是这并不保证没有hard disk caching,所以最好用 FlushFileBuffers 清一下,然后再Close。
------
====================
我为一切作努力!
Justin Shen

kabaeva
一般會員


發表:1
回覆:2
積分:0
註冊:2007-10-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-10-17 20:42:13 IP:140.115.xxx.xxx 訂閱
感謝你的方法 JustinShen的確是因為 vista 在 buffer 沒有清空造成沒關正確關閉,感謝你。
在這邊我是用 PurgeComm(handle_ , PURGE_RXABORT | PURGE_RXCLEAR | PURGE_TXABORT | PURGE_TXCLEAR); CancelIo(handle_);
這兩個函式幫忙清空,謝謝。
系統時間:2024-04-20 6:22:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!