C++ 挂起低级钩子(winapi)的最佳方法
我想知道,在效率(cpu/内存使用)方面,暂时挂起/绕过低级鼠标/键盘挂钩的最佳方式是什么 我找到的当前解决方案是在示例中设置一个全局变量“doHook”,在hook过程中测试它,如果没有设置,就让它通过CallNextHookEx,如下所示:C++ 挂起低级钩子(winapi)的最佳方法,c++,winapi,hook,keyboard-hook,mouse-hook,C++,Winapi,Hook,Keyboard Hook,Mouse Hook,我想知道,在效率(cpu/内存使用)方面,暂时挂起/绕过低级鼠标/键盘挂钩的最佳方式是什么 我找到的当前解决方案是在示例中设置一个全局变量“doHook”,在hook过程中测试它,如果没有设置,就让它通过CallNextHookEx,如下所示: if ((nCode < 0) || (!doHook)) { return CallNextHookEx(NULL, nCode, wParam, lParam); } if((nCode
if ((nCode < 0) || (!doHook))
{
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
if((nCode<0)| |(!doHook))
{
返回CallNextHookEx(NULL、nCode、wParam、lParam);
}
这是一个好的解决方案吗?更好的方法
谢谢您有两种选择:
- 通过调用完全移除挂钩
- 将吊钩留在原位,跳过正常操作
基本上,对于所有输入事件,您的do nothing钩子仍然使用数千个时钟周期进行上下文切换。为了最小化整体影响,你应该考虑完全卸载钩子并在必要时重新安装它。对于我当前正在做的程序,我需要以光速启用钩子,所以我认为完全卸载和重新安装钩子不是一种选择,因为我认为重启比用我的慢得多。解决方案(或者可能没有我想象的那么慢?)。我想到了另一个解决方案:难道不可能创建一个专门用于钩子的线程,然后挂起/暂停它,然后继续它吗?(我对线程还是很陌生)难道不可能吗?挂起的线程就是:一个不会被安排执行的线程。在执行钩子链时,没有任何工具可以跳过这个特定的线程。由于您关心性能,您可能应该使用探查器来测量当前性能,比较不同的实现,并做出明智的决策。