首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

有关线程的基础有关问题

2012-02-05 
有关线程的基础问题//---------------------------------------#includevcl.h#pragmahdrstop#includeUn

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

#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

热点排行