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