作者wave1et (百分百殖利率)
看板C_and_CPP
标题[问题] BCB Thread 为何会锁住主视窗?
时间Sun Nov 29 19:55:40 2009
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
1F:推 kikiqqp:Application->ProcessMessages(); 11/29 20:44
2F:→ wave1et:谢楼上! 11/29 21:35
3F:→ wave1et:没用Q_Q 11/29 21:38
4F:→ firose:就这两段程式码,应该不会卡住,应是没贴出来部分的问题。 11/29 22:01
5F:推 cole945:会卡住会正常的. 因为你在UI-Thread中sleep了30秒, 等於 11/29 22:06
6F:→ cole945:这30秒没办法处理其他Message(包括回应user input与重绘) 11/29 22:06
7F:→ cole945:加了ProcessMessage()不过是每30秒可以处理Message.. 11/29 22:07
8F:→ cole945:但卡住30秒的事还是存在. 解法就不是要在event-handler里 11/29 22:07
9F:→ cole945:写会跑很久的东西. 11/29 22:07
10F:→ wave1et:谢谢楼上的指教,我会好好想一下的! 11/29 22:11
11F:推 cole945:其实我回错了....我没看到create thread的部份...orz 11/29 22:13
12F:→ cole945:你应该看看 tt class的建构子tt(bool)的说明.. 11/29 22:15
13F:→ cole945:应该是true的话,会等待thread执行终止,应此卡到UI-Thread 11/29 22:16
14F:→ cole945:因为ButtonClick()是由UI-Thread执行的,卡住的原因就是我 11/29 22:16
15F:→ cole945:上面会的那样了@@ 11/29 22:16
16F:→ wave1et:谢楼上,试出来了^^ 11/29 22:20