读书人

有关线程的基础有关问题

发布时间: 2012-02-05 12:07:14 作者: rapoo

有关线程的基础问题
//---------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h "

#pragma package(smart_init)


__fastcall fortime::fortime(bool CreateSuspended,TLabel *Label)
: TThread(CreateSuspended)
{
show=Label;
Priority=tpNormal;
FreeOnTerminate=true;
}

void __fastcall fortime::Execute()
{
Synchronize(showlab);//---- Place thread code here ----
}
//---------------------


void __fastcall fortime::showlab()
{
for(int i=0;i <=100000;i++)
{show-> Caption=i;
show-> Update();
Application-> ProcessMessages();
}

//TODO: Add your source code here
}
上面的代码中,不加Application-> ProcessMessages();的话主窗体就不会响应,有什么办法解决吗?
void __fastcall TForm1::Button2Click(TObject *Sender)
{
for(int i=0;i <=100000;i++)
{Label1-> Caption=i;
Label1-> Update();
Application-> ProcessMessages();
}
}

上面这小段代码Application-> ProcessMessages();加上后和使用线程的效果一样,运行过程中无法关闭窗体,怎么办?

[解决办法]
帮顶
[解决办法]
用Application-> ProcessMessages();来分发一次消息
[解决办法]
这里关系到GUI线程了
在执行 Label1-> Caption=i;
Label1-> Update();
后,Update应该是发一些消息到GUI线程去了
此时候应该要
Application-> ProcessMessages()一下,让GUI线程处理下这些消息
如果不这样的话,GUI线程可能会不响应了

[解决办法]
up
[解决办法]
帮顶,关注
[解决办法]
用PostMessage来控制,不过代码相对复杂点
[解决办法]
http://www.libing.net.cn/read.php/1014.htm

侃侃这个
[解决办法]
你在循环中设置个标志,onclose时置变量推出或者暂停!

[解决办法]

#ifndef Unit2H
#define Unit2H
//---------------------------------------
#include <Classes.hpp>
//---------------------------------------
#define WM_MYMESSAGE WM_USER + 1000
class fortime : public TThread
{
private:

HWND m_ProcessWindow; // 处理窗口句柄
TLabel * show;


protected:
void __fastcall Execute();

void __fastcall WndProc(TMessage &Message);
void __fastcall OnTerminate(TObject * Sender);
public:
__fastcall fortime(bool CreateSuspended,TLabel * Label);
};
//---------------------------------------
#endif

[解决办法]
http://www.go4pro.org/cate_list.asp?cate=13

读书人网 >C++ Builder

热点推荐