我正在另一个进程中使用注入的 DLL。在这个 DLL 中,我创建了一个线程来设置 2 个定时器并执行一个 KeyboardHook (SetWindowsHookEx WH_KEYBOARD_LL)...为了使这个钩子和 2 个定时器工作,我需要创建一个消息泵过程。我将此消息泵称为我的线程上的最后一件事,正如您在我的 Thread.Execute 中看到的那样:
procedure MyMainThread.Execute;
begin
while not Terminated do
begin
MyThread:= Self;
StartKeyboardHook;
StartUp;
SetTimer(0, 0, 60000, @MyMainThread.ContactHome);
SetTimer(0, 0, 40000, @MyMainThread.MapProc);
CreateMessagePump;
Terminate;
end;
end;
好的,在 CreateMessagePump 调用之后,我执行了 Terminate,因为我相信 Message Pump 是一个无限循环,如果我从中退出,就会发生错误,所以我需要终止我的线程。CreateMessagePump 在此:
procedure MyMainThread.CreateMessagePump;
var
AppMsg: TMsg;
begin
while GetMessage(AppMsg, 0, 0, 0) do
begin
TranslateMessage(AppMsg);
DispatchMessage(AppMsg);
end;
//if needed to quit this procedure use PostQuitMessage(0);
end;
我这样做是正确的方式吗?我的意思是,相信这个循环是无限的是否正确?