有关线程的基础问题
//---------------------------------------
#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