gpt4 book ai didi

delphi - 全局钩子(Hook)线程占用太多CPU,如何解决?

转载 作者:行者123 更新时间:2023-12-03 15:40:57 28 4
gpt4 key购买 nike

以下全局 Hook 线程占用了太多 CPU,除非我在那里添加 Sleep(10),除了 sleep (10 毫秒)之外,还有其他解决方案吗?对于我的应用程序的性能而言, sleep 看起来并不是最佳解决方案。如果我添加过多的 sleep ,是否也会减慢鼠标的速度。

  procedure THookThread.Execute;
begin
hookhandle := SetWindowsHookEx(WH_MOUSE_LL, @LowLevelMouseHook, Hinstance, 0);

while not Terminated do
begin
MessageLoop;
// Sleep(10);
end;

UnHookWindowsHookEx(hookhandle);
hookhandle := 0;

end;

procedure THookThread.MessageLoop;
var
msg: TMsg;
begin
while PeekMessage(msg, 0, 0, 0, PM_NOREMOVE) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;

最佳答案

您的消息循环是一个繁忙的循环。您应该使用 GetMessage 而不是 PeekMessage。这是因为 GetMessage 会阻塞,直到消息添加到队列中为止。

您在注释中注意到 GetMessage 阻止了您的终止代码。通过在终止线程后向线程发布消息来处理该问题。 WM_NULL 作为一般唤醒,或 WM_QUIT 作为退出消息循环的显式指令。

关于delphi - 全局钩子(Hook)线程占用太多CPU,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25908162/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com