在BCB中如何利用纯种对象创建线程?
我已经创建好了一个线程类TMyThread,然后在一个窗体按钮中这样写:
TMyTread *pMyThread=new TMyTread(false);
delete pMyTread;
可是线程硬是不执行,但我这样写:
TMyTread *pMyThread=new TMyTread(false);
线程就执行了,可是我有一个疑问:这样写没有delete语句会不是造成内存泄漏?
该怎么写,请高手们赐教
[解决办法]
楼主既然想到内存泄漏的问题就应该想到delete的时候会清除所有相关内存数据,包括线程句柄,当然线程就直接中止了。
可以在不用这个线程的时候释放它。
[解决办法]
线程刚一创建,就被你释放了
你可以把对线程对象的引用 include 移动到你的单元 头文件中,再在类中声明线程对象
或者直接放在当前单元的最前一个函数前也可以。
// 举例
class TForm1
{
private:
TMyTread *pMyThread;
};
// ----- 第一个按钮 ------------------------
pMyThread = new TMyTread(false);
// ----- 第二个按钮 ------------------------
delete pMyTread;
这样对象就不会立刻被删除了,接下来就看你具体怎么设计了
[解决办法]
TMyTread *pMyThread=new TMyTread(false);
删除用
pMyThread-> FreeOnterminate = true;
这样线程执行完会自动删除。
[解决办法]
线程类加上析构函数
__fastcall ~TMyTread ()
{
//........
}
在构造中
__fastcall TMyTread::TMyTread(bool CreateSuspended)
: TThread(CreateSuspended)
{
FreeOnTerminate=true;
}
类的Execute函数执行完类会自动调用析构函数。不需要显示的用delete去删除。