作者meltice (三亿两千万大散户)
看板Programming
标题Re: Borland C++ Builder 程设技巧求教
时间Sat Apr 18 15:57:51 2009
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