看板 C_and_CPP 關於我們 聯絡資訊
Win在Overlap上有一些做法,想請教與討論 1. 通常會看到 Writefile或是ReadFile,參數放overlap Result = WaitForSigleObect() switch(Result) { Timeout: . . Object: } 不過我前主管當初帶我的時候,是教我另一個方法 2. 有一個大的Timer在管理接收與傳送 WriteFile方面通常會放overlap,因為寫入不會影響流程 Timer { ClearCommError(&constat) if( constat.cbInQue ) //RS232的話 { //不放overlap,確保資料有收完才往下跑 while( ReadFile(NULL) ) { 流程 } } ... //寫入不會影響流程,並且在下一次Timer啟動前已寫入 WriteFile(overlap) } =============================================================== 我因為受到主管的影響,偏好愛用第二種作法,因為可以收完資料 後再跑流程,送出要送的資料。而因為有Timer,就可以一直接收, 不需要做有些人會做的 While( wait...),不過要寫好Time Out機制 我是想問這兩種作法大家有什麼意見?因為使用第二種方法還滿穩定 的,比較不會遇到以下的作法: //通常滿常看人要Call API這樣做,譬如開裝置或送Command if(SendData() == false) { Sleep(xx) if(SandData() == flase) } 第二種只要資料沒傳出去,Timer就會一直送,成功才跳到下一個流程, 或是TimeOut,但是這種的缺點就是很沒有彈性,因為資料是送過去,但 不能馬上讀到。而且不像第一種可以在更上層直接呼叫傳送接收,上層 等於是直線式的使用,可以if( Send()==flase)然後就如何處理,對於上 層修改流程很簡單,而第二種就很麻煩,因為丟出去後,不會立即回傳, 所以上層無法立即得知結果 另外可以請問有人知道USB有類似cbInQue的東西嗎?不然都得一直使用ReadFile ,感覺很花時間.... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.138.161.236
stupid0319:用ReadFileEx放CallBack如何 11/29 00:49
clarkman:剛去查了一下,我還真的第一次看過放Callback,謝啦, 11/29 00:55
clarkman:長了知識!!! 11/29 00:55