首页
社区
课程
招聘
[求助]线程内更新主窗口标题出问题,请教
发表于: 2012-7-21 21:50 4031

[求助]线程内更新主窗口标题出问题,请教

2012-7-21 21:50
4031
今天在整一个小工具的时候出现点问题,头痛了,请教。目的是想在一个线程内动态的更改主窗口标题 ,刚开始直接在线程内使用setwindowtext,可是总在在调用setwindowtext时死掉,后来改用全局变量保存标题字符串,然后向主窗口发送消息更新,调试时可正常工作了,但是直接运行去出现错误,原因为除数为零。挂调试器发现EBX出错时为0了,不知道怎么回事,请各位帮看看。代码如下:

APPStartTime是程序启动的时候用gettickcount获取并保存在全局变量中的。
APPTitle是一个全局字符串变量
线程发送消息后有一个sleep,1000等待1s

invoke RtlZeroMemory,addr APPTitle,sizeof APPTitle
invoke	GetTickCount
.if eax
	sub eax,APPStartTime
	mov ebx,eax
	mov eax,1000
	div ebx
	invoke wsprintf,addr APPTitle,CTXT("软件分发-网关服务器  已启动%d秒"),eax
	invoke PostMessage,hMainWnd,WM_UpdateMainWndTitle,0,0
.endif

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
汇编的看不懂!只懂点 DELPHI 的。。。
DELPHI NEW-OTHER-THREAD OBJECT 然后新建的线程里边有明确的说明如何调用VCL!

unit Unit2;

interface

uses
  Classes;

type
  test = class(TThread)
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

implementation

{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure test.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ test }

procedure test.Execute;
begin
  { Place thread code here }
end;

end.

不知道是否可以帮助到你!
2012-7-21 23:22
0
雪    币: 123
活跃值: (95)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
Delphi这个俺不懂,不过还是感谢。谢谢。
2012-7-22 08:15
0
雪    币: 3
活跃值: (81)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
程序启动时同时线程启动,这样程序启动时得到的APPStartTime的值和线程中GetTickCountt得到的值是不是可能会一样?这样相减就会得0了。试着让线程晚一点启动呢。
2012-7-22 08:50
0
雪    币: 8599
活跃值: (5065)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
楼主换QueryPerformanceCounter这个吧,精确到10ms.GetTickCount精确到55ms,55ms以内可以干好多事情.比如远行楼主的主程序,然后再运行到线程函数...
2012-7-22 10:13
0
游客
登录 | 注册 方可回帖
返回
//