procedure tapplication.hooksynchronizewakeup;
begin
classes.wakemainthread := wakemainthread;
end;
procedure tapplication.unhooksynchronizewakeup;
begin
classes.wakemainthread := nil;
end;
上面两个方法分别是在tapplication类的构造函数和析构函数中被调用。
这就是在application对象中wakemainthread事件响应的代码,消息就是在这里被发出的,它利用了一个空消息来实现:
procedure tapplication.wakemainthread(sender: tobject);
begin
postmessage(handle, wm_null, 0, 0);
end;
而这个消息的响应也是在application对象中,见下面的代码(删除无关的部分):
procedure tapplication.wndproc(var message: tmessage);
…
begin