CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

请教线程的唤醒问题!

楼主lOgpIe(睡猫)2003-08-03 15:53:32 在 Delphi / Windows SDK/API 提问

procedure   TTestThread.Execute   ;  
  begin  
      FLock.Enter   ;  
      hEvent:=CreateEvent(nil,True,False,nil);  
      if   intRun=1   then   SetEvent(hEvent)   else   resetEvent(hEvent);  
      if   WaitForSingleobject(hEvent,INFINITE)=WAIT_OBJECT_0   then     Synchronize(ShowMsg);  
      intRun:=0;  
      FLock.Leave   ;  
  end;  
     
  procedure   TTestThread.ShowMsg   ;  
  begin  
      Form1.Memo1.Lines.Add(FData);  
  end;  
     
  intRun,hEvent均是TTestThread的私有成员  
     
  线程初始时处于不发信号的状态并加入线程池中  
     
  通过  
     
  TTestThread(ThreadPooler.FActiveList.Items[i]).intRun:=1;  
  来设置线程池内线程的发信号状态  
     
  问题1:照理该线程处于发信号状态时TTestThread.Execute因  
     
  改继续往下走啊,也就是MEMO1上显示FDATA,而该段程序却并  
     
  非如此,不知为何。  
     
  问题2:可以通过再次CREATE执行EXECUTE,但这样的效率很低  
     
  ,速度慢了很多,请问有什么办法可以不通过再次CREATE而执  
     
  行EXECUTE(此时处于发信号状态),线程创建时是inherited    
     
  Create(false),   所以也不能用resume.  
  问题点数:0、回复次数:3Top

1 楼pencil_xx(TureApple)回复于 2003-08-03 16:17:07 得分 0

在这里  
   
  waitforsingleobject(hevent,infinite)  
   
  你是否把创建事件的HANDLE  
   
  与线程的HANDLE  
   
  弄混了.  
   
  这个hevent  
   
  是不是应该由  
   
  createthread来得到!个人意见:)  
  Top

2 楼pencil_xx(TureApple)回复于 2003-08-03 16:29:59 得分 0

对不起我刚才查了一些资料.  
   
  在  
   
  crateevent的时候.  
   
  第三个参数如果设置为True则初始为有信号那么线程可直接执行?Top

3 楼westfly(左眼)回复于 2003-08-04 06:18:35 得分 0

procedure   TTestThread.Execute   ;  
  begin  
      while   not   Terminated   do  
      begin  
          if   WaitForSingleObject(FEvent.Handle,   INFINITE)   =   WAIT_OBJECT_0   then  
          try  
              FLock.Enter;  
              //dosomething  
          finally  
              FLock.Leave;  
          end;  
      end;  
  end;Top

相关问题

  • MFC下线程唤醒问题
  • 如何唤醒正在sleep的线程?
  • 线程在Sleep时,怎样能用事件中断(唤醒)?
  • 在linux中如何让子线程挂起、唤醒?
  • *** 如何唤醒一个处于SLEEP状态的线程?****
  • 不用 signal,如何实现线程的休眠与唤醒
  • 如何唤醒调用了Sleep()函数在睡的线程?谢谢
  • 怎么使一个线程休眠? 然后在在需要的时候唤醒?
  • 我用ResumeThread()函数唤醒一个处于睡眠状态的线程时发现的问题
  • 不用 signal,如何实现线程的休眠与唤醒( 在WINDOWS 和 LINUX 上都要实现)

关键词

  • 线程
  • ttestthread
  • intrun
  • 发信号
  • hevent
  • flock
  • waitforsingleobject
  • infinite
  • 状态
  • 问题

得分解答快速导航

  • 帖主:lOgpIe

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo