动态创建的控件在自己的事件中销毁自己安全吗?
myy 2005-11-14 03:10:51 我写了一个不可视控件,内部有个线程(用的是BeginThread,未用TThread),
线程函数的参数就是“Self”:
BeginThread(nil,0,@_WkrThreadProc,Pointer(Self),CREATE_SUSPENDED,dwThreadId);
另外控件有个私有的用AllocateHWnd()建立的隐藏窗口。
使用者调用控件的Start()方法后,Start()内启动线程,线程在工作中,不断用
PostMessage投递自定义的消息到隐藏窗口(线程退出前的最后一个消息是自定义
的WM_THREAD_END),隐藏窗口的窗口过程处理消息并调用事件点火代码触发事件,
WM_THREAD_END消息仅仅就是触发控件的OnEnd(Sender: TObject)事件,没有其他代码。
控件的destructor中先等待线程的结束(如果线程还在运行),清理一些成员,
然后DeallocateHWnd隐藏窗口,
-----------------------------
我的问题是:如果使用者动态创建控件,并在在控件的OnEnd事件里把控件自身销毁,
比如Sender.Free()是安全的吗?