VerySleepy Profiling c ++代码

Chr*_*ndy 1 c++ profiling verysleepy

在分析我的代码以找到变慢的时候,我有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
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这些功能是什么?为什么他们花了这么长时间,以及如何解决它们.

谢谢

43l*_*v3k 7

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

它们占用了大量的CPU时间,因为它们是专为此而设计的.


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

  • 更改通知
  • 控制台输入
  • 事件
  • 内存资源通知
  • 互斥
  • 处理
  • 信号
  • 线
  • 等待计时器

所以它可用于其他可能的事情是控制台用户输入等待.


ZwDelayExecution是Windows的内部功能.可以看出它用于实现Sleep功能.这是Sleep函数的调用堆栈,所以你可以亲眼看到它:

0  ntdll.dll        ZwDelayExecution    
1  kernel32.dll     SleepEx     
2  kernel32.dll     Sleep   
Run Code Online (Sandbox Code Playgroud)

它可能使用汇编低级功能来实现,因此它可以延迟精度为100ns的线程.


MsgWaitForMultipleObjects有一个类似的WaitForSingleObject目标.