看板 C_and_CPP 關於我們 聯絡資訊
大家好,小弟我用MFC寫了一段讀和寫RS232的程式,RS232的baud rate是9600 程式大致如下敘述 a. 第一段程式是用一個無限迴圈去看RS232有沒有資料傳過來,大概長這樣 num = 256; while(true) { // tick1 ReadFile(this->m_hCom, ReadBuf, num, &Read, NULL); // tick2 } 這段程式的執行結果大概會是這樣,從tick1執行到tick2需要2700個tick,讀回來 的ReadBuf裡面什麼也沒有,RS232這時也確實沒有傳資料過來,如果num改成128 tick1到tick2就減少成1435個tick,請問有辦法在無法知道ReadBuf會抓到什麼樣 的資料的情況下,讓ReadFile很快就結束嗎? 還是說只要讀的資料量越大,就一定 得花更多時間? b. 第二段程式是用兩個同步執行的thread,去對同一個RS232做WriteFile,兩個thread 都會呼叫底下的這個fumction BOOL RS232_RES(unsigned char* response) { CString resStr; resStr = CString(response); num = resStr.GetLength(); while(lockflag.IsLocked()) { Sleep(1); } lockflag.Lock(); // tick1 WriteFile(this->m_hCom, response, num, &num, NULL); // tick2 lockflag.Unlock(); } 在這邊的話,如果response的長度是12,則兩個thread都可以馬上從tick1執行到tick2 但如果兩個thread的response的長度都超過35個byte,則會很明顯的從tick1到tick2 會需要2秒左右的時間,請問如果response的長度必定會影響到WriteFile執行完畢的 時間嗎?? 有沒有方法可以縮短呢?? 謝謝大家!! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.247.92 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1440245949.A.E8B.html
Ting1024: 一次讀1 byte, 讀到你要的長度再結束即可。 08/29 00:17