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

Muit-Thread 同步問題

答題得分者是:senso
small7011
一般會員


發表:19
回覆:34
積分:10
註冊:2007-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-09-20 10:30:15 IP:211.72.xxx.xxx 訂閱
請問為什麼Thread做完1~100加動作之後我的Edit1 與Edit2依然顯示為0,

[code cpp]

主程式
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Tester1 *Test1Thread;
Tester2 *Test2Thread;

Test1Thread = new Tester1(false);
Test2Thread = new Tester2(false);
}
//---------------------------------------------------------------------------

Thread .cpp
//---------------------------------------------------------------------------
void __fastcall TTestThread::Execute()
{
//SetName();
//---- Place thread code here ----
Start();
}
//---------------------------------------------------------------------------
__fastcall Tester1::Tester1(TEdit *Edit,bool CreateSuspended):TTestThread(Edit,CreateSuspended)
{
}
//---------------------------------------------------------------------
void __fastcall Tester1::Start()
{
for(int i=0;i<=100;i )
{
i ;
Display(i);
}
}
//---------------------------------------------------------------------------
__fastcall Tester2::Tester2(TEdit *Edit,bool CreateSuspended):TTestThread(Edit,CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall Tester2::Start()
{
for(int j=0;j<=100;j )
{
j ;
Display(j);
}
}
//---------------------------------------------------------------------------
void __fastcall TTestThread::Display(int i)
{
iNum=i;
Synchronize(DoVisualDisplay);
}
//---------------------------------------------------------------------------
void __fastcall TTestThread::DoVisualDisplay(void)
{
FEdit =new TEdit(this);
FEdit->Text=IntToStr(iNum);
}
//---------------------------------------------------------------------------

Thread .h
//---------------------------------------------------------------------------
#ifndef UThreadH
#define UThreadH
//---------------------------------------------------------------------------
#include
//---------------------------------------------------------------------------
class TTestThread : public TThread
{
typedef struct tagTHREADNAME_INFO
{
DWORD dwType; // must be 0x1000
LPCSTR szName; // pointer to name (in user addr space)
DWORD dwThreadID; // thread ID (-1=caller thread)
DWORD dwFlags; // reserved for future use, must be zero
} THREADNAME_INFO;
//
int iNum;
TEdit *FEdit;
void __fastcall DoVisualDisplay(void);
private:
void SetName();
protected:
virtual void __fastcall Execute();
virtual void __fastcall Start()=0;
void __fastcall Display(int i);
public:
__fastcall TTestThread(TEdit *Edit,bool CreateSuspended);
};
//---------------------------------------------------------------------------
class Tester1 : public TTestThread
{
protected:
virtual void __fastcall Start();
public:
__fastcall Tester1(TEdit *Edit,bool CreateSuspended);
};
//---------------------------------------------------------------------------
class Tester2 : public TTestThread
{
protected:
virtual void __fastcall Start();
public:
__fastcall Tester2(TEdit *Edit,bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif

[/code]

------
lee
編輯記錄
small7011 重新編輯於 2010-09-21 11:46:32, 註解 無‧
small7011 重新編輯於 2010-09-21 11:52:17, 註解 無‧
small7011 重新編輯於 2010-09-21 14:14:16, 註解 無‧
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-09-23 18:06:12 IP:61.219.xxx.xxx 訂閱
你貼的程式不能跑,我改了3個地方

[code cpp]
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Tester1 *Test1Thread;
Tester2 *Test2Thread;
Test1Thread = new Tester1(Edit1,false);
Test2Thread = new Tester2(Edit2,false);
}
__fastcall TTestThread::TTestThread(TEdit *Edit,bool CreateSuspended)
: TThread(CreateSuspended)
{
FEdit = Edit;
}
void __fastcall TTestThread::DoVisualDisplay(void)
{
FEdit->Text=IntToStr(iNum);
}

[/code]
small7011
一般會員


發表:19
回覆:34
積分:10
註冊:2007-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-09-23 18:40:01 IP:211.20.xxx.xxx 訂閱
我後來也有發現這幾個地方有問題
還是很謝謝大大解答
------
lee
系統時間:2024-03-29 2:39:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!