看板 Programming 關於我們 聯絡資訊
File>New>Other... 選擇新增一個Thread Object 自訂個Class Name例如MyThread然後按OK 建議加上FreeOnTerminate=true 否則你必須在Thread結束後手動去delete該指標 在你的Form1加上如下的code #include "Unit2.h" // 看你的MyThread定義在哪 MyThread *mt; mt = new MyThread(true); // true表示CreateSuspended mt->FreeOnTerminate=true; mt->Resume(); // MyThread::Execute()開始執行 你也可以修改MyThread的constructor就不必每次設定FreeOnTerminate __fastcall MyThread::MyThread(void) : TThread(true) { FreeOnTerminate=true; Resume(); } 這樣你的Form1就只需要這樣寫即可 mt = new MyThread(); 接下來重點在MyThread::Execute() 通常我們會在裡面擺個類似while(!Terminated)之類的迴圈 把你要執行的程式碼擺在該迴圈內 然後在Form1可以使用mt->Terminate();就可設定Terminated=true 來結束該while迴圈的執行 或是你也可以簡單寫個while(1) 這樣該Thread只有當你自行break該迴圈或是當程式結束時才會結束 接著是MyThread如何跟Form1互動 MyThread要改變Form1上的UI Control必須要透過Synchronize 在你MyThread所在位置的Unit2.cpp的開頭就有一個範例 Synchronize的功能就是避免多個Thread同時改變UI Control造成問題 Form1要傳變數進去給MyThread::Execute() 基本上用個變數傳應該就行了 除非你會有多個Thread同時寫入同一個變數 這時候就要用例如TCriticalSection保護該變數 大概是這樣... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.83.142.26