[問題] BCB Thread 為何會鎖住主視窗?

看板C_and_CPP作者 (百分百殖利率)時間14年前 (2009/11/29 19:55), 編輯推噓3(3013)
留言16則, 4人參與, 最新討論串1/2 (看更多)
BCB苦手中,上來請教一下大家 我在主視窗Form1新增一button 此Button被按下後,會new一個 thread (@1) thread中執行 sleep 30 秒(@2) 請問一下 要怎麼改才能讓主視窗不會被sleep()鎖住呢? 讓主視窗能接受其它的事件呢?(例如:拖拉主視窗) 難到用Sleep()必然造成主視窗的鎖住? 謝謝! =================Unit.cpp=================== @1: void __fastcall TForm1::Button1Click(TObject *Sender) { a=new tt(true); } ================Unit2.cpp========================== __fastcall tt::tt(bool CreateSuspended) : TThread(CreateSuspended) { Execute(); } //--------------------------------------------------------------------------- @2 void __fastcall tt::Execute() { int i=0; while (i<5) { Sleep(30000); //<----------應該是這兒鎖住 i++; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.94.223

11/29 20:44, , 1F
Application->ProcessMessages();
11/29 20:44, 1F

11/29 21:35, , 2F
謝樓上!
11/29 21:35, 2F

11/29 21:38, , 3F
沒用Q_Q
11/29 21:38, 3F

11/29 22:01, , 4F
就這兩段程式碼,應該不會卡住,應是沒貼出來部分的問題。
11/29 22:01, 4F

11/29 22:06, , 5F
會卡住會正常的. 因為你在UI-Thread中sleep了30秒, 等於
11/29 22:06, 5F

11/29 22:06, , 6F
這30秒沒辦法處理其他Message(包括回應user input與重繪)
11/29 22:06, 6F

11/29 22:07, , 7F
加了ProcessMessage()不過是每30秒可以處理Message..
11/29 22:07, 7F

11/29 22:07, , 8F
但卡住30秒的事還是存在. 解法就不是要在event-handler裡
11/29 22:07, 8F

11/29 22:07, , 9F
寫會跑很久的東西.
11/29 22:07, 9F

11/29 22:11, , 10F
謝謝樓上的指教,我會好好想一下的!
11/29 22:11, 10F

11/29 22:13, , 11F
其實我回錯了....我沒看到create thread的部份...orz
11/29 22:13, 11F

11/29 22:15, , 12F
你應該看看 tt class的建構子tt(bool)的說明..
11/29 22:15, 12F

11/29 22:16, , 13F
應該是true的話,會等待thread執行終止,應此卡到UI-Thread
11/29 22:16, 13F

11/29 22:16, , 14F
因為ButtonClick()是由UI-Thread執行的,卡住的原因就是我
11/29 22:16, 14F

11/29 22:16, , 15F
上面會的那樣了@@
11/29 22:16, 15F

11/29 22:20, , 16F
謝樓上,試出來了^^
11/29 22:20, 16F
文章代碼(AID): #1B4c4_Ab (C_and_CPP)
文章代碼(AID): #1B4c4_Ab (C_and_CPP)