子线程可以向父线程发送一个自定义的消息,<br><br>================================= 子线程 ==============================<br>type<br> TComThread = class(TThread)<br> private<br> Win_Caller: HWND; // 副线程传来的窗口句柄<br> protected<br> procedure Execute; override;<br> public<br> constructor Create(winHwnd: HWND);<br> end;<br><br>implementation<br>constructor TComThread.Create(winHwnd: HWND);<br>begin<br> inherited Create(True); // 调用系统原有的Create,并且使线程挂起<br> Win_Caller:= winHwnd; // 保存调用线程的窗口的句柄<br> Resume; // 开始执行线程<br>end;<br><br>procedure TComThread.Execute;<br>begin<br> FreeOnTerminate:= True; // 在线程执行完后,自动释放线程对象所占用的资源<br> // do something<br> SendMessage(win_caller, UM_CNTDEVERR, LM_Num, -1);<br> // do something<br>end;<br>================================= 父线程 ==============================<br>type<br> a123 = class(TThread)<br> private<br> { 这里加入自定义隐藏window的消息处理过程 }<br> protected<br> procedure Execute; override;<br> end;<br><br>implementation<br><br>procedure a123.Execute;<br>Var <br> SubThread: TComThread;<br> WinHandle: hwnd;<br>begin<br> { 在这里使用Win API函数创建隐藏的windows,并获取其句柄<br> RegisterClass(); // RegisterClassEx() // 注册这个window 的消息处理过程<br> WinHandle:= CreateEindow(); //CreateEindowEx()<br> }<br> SubThread:= TComThread.Create( WinHandle); <br>{<br> 注销前面注册的Window <br>}<br>end;<br><br>以上父进程的代码中不是完整的,只是给你提供一个实现的方法,在delphi自带的<br>源代码中的非可视类也是通过定义隐藏的window 的方式来接收消息的。<br>