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

看板C_and_CPP作者 (百分百殖利率)時間14年前 (2009/11/29 22:09), 編輯推噓1(109)
留言10則, 2人參與, 最新討論串2/2 (看更多)
參考網路上的範例try出來了 不過不知道為什麼Q_Q ※ 引述《wave1et (百分百殖利率)》之銘言: : 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); : } ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 上面改寫成 a=new tt(false); a->Resume(); : ================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 22:11, , 1F
你原本是怎麼讓thread execute的??在main form某個按鈕
11/29 22:11, 1F

11/29 22:12, , 2F
或event下tt->execute()之類的?? 這樣會卡死event
11/29 22:12, 2F

11/29 22:12, , 3F
handler的; 你查到的作法是, 1. 創建thread, 2. 醒來去
11/29 22:12, 3F

11/29 22:13, , 4F
作事(resume) // 這時它就以它的獨立thread去做自己的事
11/29 22:13, 4F

11/29 22:13, , 5F
了, 你的例子就是睡30秒. 所以主視窗操作thread的流程是
11/29 22:13, 5F

11/29 22:14, , 6F
創建與刪除, "叫它繼續跑"或暫停/停止, 而不要main form
11/29 22:14, 6F

11/29 22:14, , 7F
"直接執行"它, 這樣才能做到您想要的效果:)
11/29 22:14, 7F

11/29 22:15, , 8F
謝謝樓上的回應!
11/29 22:15, 8F

11/29 22:17, , 9F
原本執行是在寫建構子中,那他會停30秒後才建完 >_<
11/29 22:17, 9F

11/29 22:18, , 10F
第二種是建完後再呼叫Thread,Thread自已停30秒
11/29 22:18, 10F
文章代碼(AID): #1B4e2ASo (C_and_CPP)
文章代碼(AID): #1B4e2ASo (C_and_CPP)