作者wave1et (百分百殖利率)
看板C_and_CPP
标题Re: [问题] BCB Thread 为何会锁住主视窗?
时间Sun Nov 29 22:09:11 2009
参考网路上的范例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
1F:推 VictorTom:你原本是怎麽让thread execute的??在main form某个按钮 11/29 22:11
2F:→ VictorTom:或event下tt->execute()之类的?? 这样会卡死event 11/29 22:12
3F:→ VictorTom:handler的; 你查到的作法是, 1. 创建thread, 2. 醒来去 11/29 22:12
4F:→ VictorTom:作事(resume) // 这时它就以它的独立thread去做自己的事 11/29 22:13
5F:→ VictorTom:了, 你的例子就是睡30秒. 所以主视窗操作thread的流程是 11/29 22:13
6F:→ VictorTom:创建与删除, "叫它继续跑"或暂停/停止, 而不要main form 11/29 22:14
7F:→ VictorTom:"直接执行"它, 这样才能做到您想要的效果:) 11/29 22:14
8F:→ wave1et:谢谢楼上的回应! 11/29 22:15
9F:→ wave1et:原本执行是在写建构子中,那他会停30秒後才建完 >_< 11/29 22:17
10F:→ wave1et:第二种是建完後再呼叫Thread,Thread自已停30秒 11/29 22:18