RS-232 接收問題 |
尚未結案
|
chialun
一般會員 發表:20 回覆:15 積分:7 註冊:2003-09-27 發送簡訊給我 |
|
stanley
一般會員 發表:9 回覆:36 積分:14 註冊:2003-11-20 發送簡訊給我 |
你好:
你可以建立一個thread代替timer, 內容如下
while(!pMyThread->Terminated) { WaitCommEvent(handle,&dwEvent,&OverLap); if(GetOverlappedResult(handle,&OverLap,&dwRece,TRUE)){ WEvent->ResetEvent(); if(dwEvent & EV_RXCHAR) { // 資料接收處理 } } }不過你createfile的參數要改成FILE_FLAG_OVERLAPPED |
chialun
一般會員 發表:20 回覆:15 積分:7 註冊:2003-09-27 發送簡訊給我 |
|
stanley
一般會員 發表:9 回覆:36 積分:14 註冊:2003-11-20 發送簡訊給我 |
|
chialun
一般會員 發表:20 回覆:15 積分:7 註冊:2003-09-27 發送簡訊給我 |
stanley 你好: 我以改用thread代替timer ,但還是會有delay的現象.
void __fastcall TMyThread::Execute(void)
{
FreeOnTerminate=true;
while(!Terminated)
{
Synchronize(Read_COM);
Sleep(200);
}
} void __fastcall TMyThread::Read_COM(void)
{
:
:
value = rx_byte(); <- 只要執行這一行程式就會 delay,此行對com Port 讀資料.
:
} 關於你提供的範例,有幾個變數要宣告,我不曉得如何用....... 謝謝!!
|
stanley
一般會員 發表:9 回覆:36 積分:14 註冊:2003-11-20 發送簡訊給我 |
chialun你好: 程式加上說明, 若還是說明不夠清楚請搜尋help
while(!pMyThread->Terminated) { WaitCommEvent(handle,&dwEvent,&OverLap); //等待事件觸發 if(GetOverlappedResult(handle,&OverLap,&dwRece,TRUE)){ //在createfile宣告為overlap, 故加上GetOverlappedResult來判斷 WEvent->ResetEvent(); //清除事件觸發 if(dwEvent & EV_RXCHAR) { //判斷事件是否為資料接收 // 資料接收處理<--在此readfile就可以了 } } }在你的程式中有加Sleep(200), 是否是造成delay的原因 若仍無法解決, 建議另開新主題, 請眾高手看看 |
stanley
一般會員 發表:9 回覆:36 積分:14 註冊:2003-11-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |