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

在multithread中readfile出錯,哪裡出了問題?

尚未結案
weken
一般會員


發表:8
回覆:4
積分:2
註冊:2007-06-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-04 19:59:24 IP:118.169.xxx.xxx 訂閱

我建立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
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-05 02:03:52 IP:59.115.xxx.xxx 訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-05 10:27:31 IP:210.68.xxx.xxx 訂閱
存檔的方法

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])
}
}

編輯記錄
weken 重新編輯於 2008-12-05 10:29:37, 註解 無‧
weken 重新編輯於 2008-12-05 14:10:43, 註解 無‧
weken 重新編輯於 2008-12-05 14:11:25, 註解 無‧
系統時間:2017-12-11 15:20:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!