关于WaitForMultipleObjects棘手问题 (100分)

  • 主题发起人 主题发起人 苍蝇拍子
  • 开始时间 开始时间

苍蝇拍子

Unregistered / Unconfirmed
GUEST, unregistred user!
r := WaitForMultipleObjects(5,
@FThreads,
True ,
INFINITE) ;
case r of
WAIT_FAILED : Result := GetLastError ;
WAIT_OBJECT_0 : Result := 999 ;
end ;
FThreads是线程数组,已经定义
FThreads : array of THandle ;
SetLength(FThreads, 5) ;
我希望等待所有线程完成后,给我一个状态,但是我发现,WaitForMultipleObjects永远返回WAIT_FAILED,GetLastError返回值为6,Error_Invalid_Handle, 但是线程里面还是可以执行的,但有时有问题,不稳定,为什么,哪位大侠知道
 
最好把你的线程代码帖一下,估计线程内部有冲突,五个同样的线程有可能需要考虑同步问题!例如,是否同时访问了某个全局变量、线程内部包含非线程安全类的访问。
 
改为
r := WaitForMultipleObjects(5, @FThreads[0], True , INFINITE) ;

r := WaitForMultipleObjects(5, PWOHandleArray(FThread), True , INFINITE) ;
试一下,我也没调试,FThreads是一个动态数据,相当于指向指针的指针,问题肯定在这句。
 
用静态数组试试
 
使用静态数组一样,也不能直接用@FThreads
 
改為:
r := WaitForMultipleObjects(5,
FThreads, //不用@
True ,
INFINITE) ;
 
提示是“非法句柄值”看看你之前代码,是不是句柄赋值时有问题?
 
后退
顶部