Muit-Thread 同步問題 |
答題得分者是:senso
|
small7011
一般會員 發表:19 回覆:34 積分:10 註冊:2007-07-24 發送簡訊給我 |
請問為什麼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 |
senso
高階會員 發表:5 回覆:126 積分:226 註冊:2003-11-27 發送簡訊給我 |
你貼的程式不能跑,我改了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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |