gpt4 book ai didi

c++ - VerySleepy 剖析 C++ 代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:08 26 4
gpt4 key购买 nike

在分析我的代码以找出运行缓慢的地方时,我有 3 个功能显然会永远占用,这就是非常困的说法。

这些函数是:

ZwDelayExecution    20.460813   20.460813   19.987685   19.987685
MsgWaitForMultipleObjects 20.460813 20.460813 19.987685 19.987685
WaitForSingleObject 20.361805 20.361805 19.890967 19.890967

谁能告诉我这些函数是什么?为什么它们需要这么长时间,以及如何解决它们。

谢谢

最佳答案

可能这些函数用于在 Win32 API 中使线程“休眠”。它们也可能被用作线程同步,所以检查这些东西。

它们占用了如此多的 CPU 时间,因为它们是为此而设计的。


WaitForSingleObject 函数可以等待以下对象:

  • 变更通知
  • 控制台输入
  • 事件
  • 内存资源通知
  • 互斥体
  • 过程
  • 信号量
  • 话题
  • 等待计时器

所以它可以用于的另一个可能的事情是等待控制台用户输入。


ZwDelayExecution 是 Windows 的内部函数。可以看出是用来实现Sleep功能的。这是 Sleep 函数的调用堆栈,您可以亲眼看到:

0  ntdll.dll        ZwDelayExecution    
1 kernel32.dll SleepEx
2 kernel32.dll Sleep

它可能使用 Assembly 低级特性来实现,因此它可以延迟 100ns 精度的线程。


MsgWaitForMultipleObjects 有一个类似于 WaitForSingleObject 的目标。

关于c++ - VerySleepy 剖析 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16336408/

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