Dephi的同一个线程支持多次Execute吗?

F_Ronal 2013-07-18 10:04:10
创建一个Thread后,Execute方法能否多次执行呢?(不希望反复创建线程)

例如:

FreeOnTerminate := False;

procedure TReconThread.Execute;
begin
inherited;

while not Terminated do
begin
//do something
end;
Suspend();
end;

我做了测试,第一次执行Execute后,再次Resume,是不会执行Execute方法的。

是我写得不对,还是本身就不支持这种做法呢?

分不多了,见谅!

...全文
225 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
s11ss 2013-07-18
  • 打赏
  • 举报
回复
Suspend放到循环里
UnkownState 2013-07-18
  • 打赏
  • 举报
回复
楼主对execute的理解错误,首先execute是thread的一个方法,thread<> winthread可以这么说吧, execute是线程的执行体,具体的你可以看vcl中关于thread类及ThreadProc就明白了,而线程启动后就进入execute执行,当前是不会二次进入的。你suspend只是让线程不再获取时间片。
haitao 2013-07-18
  • 打赏
  • 举报
回复
Finished好像没有必要了吧
F_Ronal 2013-07-18
  • 打赏
  • 举报
回复
这样是否更好? while not Terminated do begin Finished := False; DoMyWork(); if (not Terminated) and Finished then Suspend(); end; procedure DoMyWork() begin //do it Finished := True; end;
s11ss 2013-07-18
  • 打赏
  • 举报
回复
while not Terminated do begin //do something finish if not Terminated then//最好还加上这句 Suspend(); end;
F_Ronal 2013-07-18
  • 打赏
  • 举报
回复
我会在主程序上通过一些操作来反复Resume、Suspend线程。二楼,你是建议这样写吧? while not Terminated do begin //do something finish Suspend(); end;
F_Ronal 2013-07-18
  • 打赏
  • 举报
回复
如果要使用到线程池,我就打退堂鼓了,呵呵,程序复杂了不方便调试。
lhy 2013-07-18
  • 打赏
  • 举报
回复
执行完不结束只休眠。另外还需要线程池。

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧