线程的几个小问题(50分)

  • 主题发起人 主题发起人 carrie4002
  • 开始时间 开始时间
C

carrie4002

Unregistered / Unconfirmed
GUEST, unregistred user!
1、线程能否从其内部挂起?并从其内部某需要的地方将挂起的线程再次运行?代码。
 
有啊,比如定时函数Sleep,和wait函数
waitforsingleobject
 
比如,在一个线程里,触发了某条件时需要调另一个窗体以修改某条件,
这时需要先挂起该线程,等待修改条件完毕关闭该子窗体返回时再继续
执行原线程。
我需要代码。谢谢!
 
if WaitForSingleObject(hSemaphore,30) = WAIT_TIMEOUT then
begin
//暂停30毫秒,继续允许。
end;
 
TO fengyhf:
如果我的窗体需要的时间每个使用者都不等呢?你这种方式
对于时间基本固定的情况比较适合吧?
用Resume和Suspend来控制合适吗?在调用窗体时用Suspend来
挂起,在窗体执行返回时用Resume来继续执行。如果可行的话,
这样可能会方便一些。
可以吗?
 
建议用Suspend,Resume
 
TO nicai_wgl:
谢谢你关注。
Suspend挂起后,Resume是直接从挂起处开始继续执行吗?
就象类似断点的意思?
 
Suspend,Resume 函数就是挂起和恢复,
 
Suspend挂起后,Resume是直接从挂起处开始继续执行 <<-- 是的,如果你线程里
有和其他线程共享资源的话,在挂起前最好释放掉。
 
TO Suspend:
谢谢你。
你说“在挂起前最好先释放掉与其它线程共享的资源”,那Resume时
依然从Suspend处开始执行?释放的资源在Resume前先找回?
另:因为窗体本身是线程,所以,在线程里调用另外的窗体时,其执行实质上
是并行的吧?
 
用resume和suspend本身在线程内时候不合适的
应该在其他进程中来控制
 
TO bravel:
谢谢你。我对线程本身不太了几苊。你能多说点吗?
 
挂起自身...呵呵`~~还真没这么做过...

帮顶....
 
用Suspend,Resume挂起的话,你并不知道线程当时停在何处,在访问共享资源时是程序报错的根源。
用事件或内核变量可以更明确自己代码的执行,也很方便调试。
 
suspend ,
然后在别的地方通过消息Resume
 
为什么不
d := WaitForSingleObject(YourEvent,1000);
case d of
WAIT_OBJECT_0: ;//do something
WAIT_TIMEOUT: ;//do something
end;
然后在“等待修改条件完毕关闭该子窗体”时setevent呢。
 
后退
顶部