如图,在家里可以上网,mac有线上网设置无线都可以,但是在书店,竟然不能连接无线,显示连接受限,并且自动诊断说计

11719人阅读
应用FAQ(4)
MyThread:=TMyThread.Create(False);如何判断线程MyThread已执行完毕?因为程序中有个事件必须等某线程完成后才执行说明中说可以用ReturnValue,但我感觉这个值一直是0,没有变化啊----------------------用MyThread.Waitfor或者WaitForSingleObject(MyThread.Handle, INFINITE)----------------------把你要執行的事件放到線程的Excute中MyThread.Execute&....& FreeOnTerminate:=T& Onterminate:=你要執行的事件;----------------------type& TMyThread = class(TThread)& protected& & procedure E&{ TMyThread }procedure TMyThread.Ebegin& FreeOnTerminate := F& Sleep(5000);procedure TForm3.Button1Click(Sender: TObject);var& T : TMyTbegin& T := TMyThread.Create(False);& try& & T.WaitF& & ShowMessage('执行完了');& finally& & T.F&procedure TForm3.Button2Click(Sender: TObject);var& T : TMyTbegin& T := TMyThread.Create(False);& try& & if WaitForSingleObject(T.Handle, INFINITE) = WAIT_OBJECT_0 then& & & begin& & & ShowMessage('执行完了');& & && finally& & T.F&&//方法是可以的,但是有一个缺点,当执行线程的时候主程序也会停下来等待线程的结束,主程序会暂停响应,这样调用多线程就没有意义了。----------------------用Onterminate事件当然可以,但是这时线程并没有结束,仅仅表示Execute方法调用结束了,而用WaitforSingleObject就不同了----------------------使用Onterminate事件固然有它的局限性,因为触发Onterminate事件的时候线程还没有完全结束,用它的优点是线程执行的同时,主程序也可以继续执行,这也是多线程的优点之一。要实现线程完全结束才触发主程序继续执行的话,主线程中执行WaitFor是比较好的实现方法,然而主线程调用WaitFor必须用MsgWaitForMultipleObjects来等待线程,而不是WaitforSingleObject。因为在线程函数Execute中可能调用Synchronize处理同步方法,而同步方法是在主线程中执行的,如果用WaitForSingleObject等待的话,则主线程在这里被挂起,同步方法无法执行,导致线程也被挂起,于是发生死锁。如果必须要用WaitForSingleObject,应该另开线程来调用WaitForSingleObject,而不是在主线程。以上是在下愚见,见笑了!哈!----------------------这样可以使得界面不&死&,但是由于ProcessMessages的缘故,不能保证某段代码不被执行,除非设置一个标志..procedure TForm1.Button3Click(Sender: TObject);var& T: TMyT& H: TH& W: DWbegin& T := TMyThread.Create(False);& H := T.H& repeat& & W := MsgWaitForMultipleObjects(1, H, False, INFINITE, QS_ALLINPUT);& & Application.ProcessM& until (W = WAIT_OBJECT_0) or (W = WAIT_FAILED);& ShowMessage('执行完了');& T.F ----------------------//等待一个线程结束的关键代码。绝对可行& var& & i:& & isquit:begin& if assigned(AThread) then& begin& & isquit:=GetExitCodeThread(AThread.handle,i);& & if isquit then& & begin& & & if i=STILL_ACTIVE then& & & begin& & & & WaitForSingleObject(AThread.Handle,INFINITE& & & & );& & & end& &&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:737363次
积分:9311
积分:9311
排名:第1803名
原创:96篇
转载:463篇
评论:85条
(1)(1)(1)(2)(3)(2)(2)(2)(1)(1)(1)(3)(1)(3)(1)(1)(1)(4)(10)(6)(12)(6)(2)(4)(5)(2)(7)(12)(10)(3)(10)(6)(6)(7)(7)(7)(7)(9)(3)(2)(5)(7)(14)(8)(5)(2)(13)(23)(44)(33)(43)(10)(40)(5)(18)(10)(4)(1)(2)(2)(2)(36)(15)(15)(29)

我要回帖

更多关于 常见的有线上网设备 的文章

 

随机推荐