各位仁兄,你们好!
虽然小弟已经搞Delphi很多年了,但是有个问题我一直没搞清楚,请大家指教:
一个线程被挂起的时候,它是不是就停在当前执行的地方(我是这么理解的)?有没有办法让它停在我程序中指定的地方?
我现在实现的方法比较麻烦,就是在线程里重写一个方法,需要挂起时,执行自己写的方法,方法中置一个标志,并不真的挂起,在线程代码中判断那个标志,被置位了就清楚标志,并挂起自己,恢复时采用线程自己的Resume
有更好的方法请告诉我啊,谢谢
虽然小弟已经搞Delphi很多年了,但是有个问题我一直没搞清楚,请大家指教:
一个线程被挂起的时候,它是不是就停在当前执行的地方(我是这么理解的)?有没有办法让它停在我程序中指定的地方?
我现在实现的方法比较麻烦,就是在线程里重写一个方法,需要挂起时,执行自己写的方法,方法中置一个标志,并不真的挂起,在线程代码中判断那个标志,被置位了就清楚标志,并挂起自己,恢复时采用线程自己的Resume
有更好的方法请告诉我啊,谢谢
解决方案 »
- 散分,谁推荐一些电影看下,要中国话的!
- 为什么TSocketConnection.Close有时成功,有时又不成功呢?
- >>> 集合数据如何存到磁盘文件 <<<
- 怎样使一个窗口在初始最大化后只能最小化和最大化?可以象vc的窗口那样使得最大化和最小中间的那个钮灰掉吗
- 有关delphi 中如何自定义属性
- 我把女朋友惹惹生气了,如何办?
- treeview控件如何保存当然的状态?下次再运行程序恢复上次的状态?
- 今天去应聘了,这是我第一次应聘,老板说过年之后初八的通知我去鉴试用合同,各位帮忙分析一下
- WriteBinaryData(string,buffer,buffersize)这个buffer做何解释?怎么传递这个参数?
- 请教!在delphi中有没有取当月天数的函数?怎样能返回当前月的天数?
- [反外挂]如何制作一个反外挂的游戏登陆器,进来有分.请大家关注
- IdTCPServer和IdTCPClient协议定义问题,我在服务端怎么分析客户段送过来的流
在线程中 WaitForSingleObject 或 WaitForMultiObjects 等待事件,主线程中不使用 SuspendThread 挂起,而通过 SetEvent 使得工作线程进入到另外一个 WaitForSingleObject
当给他另外一个 Event 的时候就可以解除挂起
系统所谓挂起本身实际上也是使线程处于对某个事件的等待状态,只不过现在不在内核中完成而转为在用户态实现而已
例如一个线程对象的 Execute 过程中:
procedure TTestThread.Execute();
begin
while not Terminated do
begin
Line 1;
//判断是否挂起?
Line 2;
//判断是否挂起?
Line...;
//判断是否挂起?
Line N;
//判断是否挂起?
end;
end;
这样的话不晕死啊。
我觉得楼主还是把想达到的效果说的在具体一些,我们可能会有更好的答案。
我现在主程序要挂起线程的时间是随机的(并不知道线程执行到何处),但是线程执行某些动作时,不能被挂起,一定要完成那些指令,所以有这个冲突,我现在处理的方法如下:
线程体:
DoSomething1;
DoSomething2;
DoSomething3;
//以下是能挂起的地方
if CanSuspend then
//CanSuspend是自己定义的成员,由主程序在需要挂起线程时置位,然后等待线程挂起
//主程序判断到线程的Suspended置位时,就处理事情,最后Resume线程
begin
CanSupend:=False;
Self.Suspend;
end
else
回线程头;
线程结束我觉得这方法不好,或者说不转业,所以寻求更好的方法,请各位支持!谢谢!