在Delphi线程对象中创建时会有一个逻辑参数,让你选择是否挂起。要注意调用SUSPEND和RESUME是有计数的。如果调用了两次Suspend,那么就要调用两次Resume唤醒。还有对于TThread对象的EXECUTE方法是执行完了线程也就结束了,在默认的Thread属性中如果EXECUTE执行完了,TThread对象会自己释放,如果再去访问这个线程对象会出非法内存访问错误。在使用EXECUTE方法时一般都使用循环,只有在需要线程结束时才推出循环,这点要注意。一般格式为: while Terminated do begin //执行代码 end; 这么写可以使用TThread的Terminate方法退出线程,若不这样写需要修改Terminate方法。
对不起 while Terminated do begin //执行代码 end; 这个写错了应该是 while not Terminated do begin //执行代码 end;
syncobjs;Lock:TCriticalSection;
我在主线程中用SUSPEND方法挂起子线程后用RESUME唤醒,似乎不起作用.
假如RESUME唤醒线程后是从哪里开始执行?
是不是EXECUTE方法的第一行代码开始?
while Terminated do
begin
//执行代码
end;
这么写可以使用TThread的Terminate方法退出线程,若不这样写需要修改Terminate方法。
while Terminated do
begin
//执行代码
end;
这个写错了应该是
while not Terminated do
begin
//执行代码
end;
我在主线程中用SUSPEND方法挂起子线程后用RESUME唤醒,似乎不起作用.
假如RESUME唤醒线程后是从哪里开始执行?
是不是EXECUTE方法的第一行代码开始?------------
suspent后 肯定是不会被执行到的,而resume后 是表示它可以被执行 但是不一定被执行到..
这个不敢保证的.
要不用delphi自己的方法也行。
delphi创建Thread的时候总是给每一
个Thread创建一个子窗体。当你的进程
调用的这个Thread的时候,朱窗体就
用sendmessage发给子窗体信息,
当操作返回时,子窗体释放
。也就是将子线程挂起了。
//详见delphi深度历险。