在multithread中readfile出錯,哪裡出了問題? |
尚未結案
|
weken
一般會員 ![]() ![]() 發表:8 回覆:4 積分:2 註冊:2007-06-28 發送簡訊給我 |
我建立multithread去讀取多個COM PORT的東西,讀取的資料卻相互交錯,不知道是哪裡的問題。 thread 的宣告 Thread1 *Parser[10]; Parser[com] = new Thread1(true); Parser[com]->Resume(); thread 的執行 void __fastcall Thread1::Execute() { while(!Terminated) { if (ReadFile(hCom[com], InBuf, Stat.cbInQue, &BytesRead, NULL) && BytesRead > 0) { //將InBuf的資料依COCM不同,存成不同的檔案 } } } 寫法大概是這樣,宣告多個THREAD,然後Execute的時候可能會從不同的hCom中接收資訊 但不知道為何不同COM的資料卻會互相交錯在一起,這是因為ReadFile 不支援multithread嗎? 或是要用不同的寫法? 謝謝回答 編輯記錄
weken 重新編輯於 2008-12-04 20:00:40, 註解 無‧
|
aftcast
站務副站長 ![]() ![]() ![]() ![]() ![]() 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
multithread 是沒問題的。 readfile也沒問題。
可能是你用了vcl的方法或是使用了全域的變數造成。 尤其,你是用什麼方法存檔? c裡的 fopen 或是 c 裡的 ofstream ? 還是你用了delphi 或是vcl裡的存檔…這樣就可能有問題。
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
weken
一般會員 ![]() ![]() 發表:8 回覆:4 積分:2 註冊:2007-06-28 發送簡訊給我 |
存檔的方法
while(!Terminated) { ClearCommError(hCom[com], &DwError, &Stat); if (ReadFile(hCom[com], InBuf, Stat.cbInQue, &BytesRead, NULL) && BytesRead > 0) { InBuf[Stat.cbInQue] = '\0'; fp=fopen(FName.c_str(),"ab "); fwrite(InBuf, sizeof(InBuf), 1, fp); fclose(fp); } } 用基本的fopen和fwrite 在multithread中會產生問題嗎? 或者我必須宣告多個fp,多個BUF呢 while(!Terminated) { ClearCommError(hCom[com], &DwError, &Stat[com]); if (ReadFile(hCom[com], InBuf[com], Stat[com].cbInQue, &BytesRead[com], NULL) && BytesRead[com] > 0) { fp[com]=fopen(FName.c_str(),"ab "); fwrite(InBuf[com], sizeof(InBuf[com]), 1, fp[com]); fclose(fp[com]) } } 謝 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |