【问题标题】:why does the delphi ide increase the windows platform timer resolution?为什么delphi ide会增加windows平台定时器分辨率?
【发布时间】:2015-09-01 17:32:22
【问题描述】:

我注意到,每当我打开 delphi 2010 ide 时,我的笔记本电脑的电池寿命明显变差。当我 powercfg /energy 跟踪时,它显示(除其他外)bds.exe 请求的计时器分辨率小于默认值 15.6 毫秒。

Current Timer Resolution (100ns units) 10006 
Maximum Timer Period (100ns units) 156250 


Requested Period 10000 
Requesting Process ID 7996 
Requesting Process Path \Device\HarddiskVolume2\Program Files (x86)\Embarcadero\RAD Studio\7.0\bin\bds.exe 

delphi 是否有充分的理由更改平台计时器分辨率?最新版本的 ide 也有相同的行为吗?

【问题讨论】:

  • 我在 XE7 上看不到这一点。除非您的意思是使用 IDE 开发的应用程序表现出相同的行为,否则我真的看不出该软件的 5 年旧版本有什么问题。 Delphi之类的问题在于它可以由第三方控件完成。改变事物的不一定是 IDE。
  • @Graymatter 我在 XE7 上看到了这个。我注意到,Firefox 也要求 1 毫秒。我希望原因是使Sleep ms 准确。
  • @J 好的,我现在明白了。不知道我第一次是怎么错过的。我仍然认为这是一个很小的问题。开发工具与常规应用程序不同。调试器、分析等都使它们有点偏向一边。
  • @Graymatter 我同意这不是一个大问题,我只是对此感到好奇,而且 IDE 在不编译时会导致电池耗尽,这有点烦人。
  • @J 我相信 Firefox 在需要 Flash 和 html5 图形之类的东西时会增加计时器,但在不需要时应该缩小。

标签: delphi ide delphi-2010


【解决方案1】:

IDE 为 ProjectManager、StructureView 和 Log-Window 使用了一个非常旧版本的 VirtualTrees.pas。此版本在其InitializeGlobalStructures 函数中调用timeBeginPeriod,并将计时器分辨率设置为最小值(1)。它在单位的finalization 块中重置。

VirtualTrees 通过这次提交改变了这种行为:

2013-09-20 21:40:21: No longer changing timer resolution globally (#365)

但是 IDE 仍然使用一个非常旧的版本,它甚至没有使用 UnicodeString,而是使用 WideString。所以它自 Delphi 2007 以来就没有更新过。

【讨论】:

  • 谢谢安德烈亚斯!我想如果我在 IDE 打开后重新设置计时器,我可能会获得更好的电池寿命
  • 你知道Virtual Tree View 改变定时器分辨率的原因吗?在 IDE 运行时将其更改回来是否安全,或者会对虚拟树视图产生不利影响?
  • @dummzeuch 代码被注释为Specify an useful timer resolution for timeGetTime。但可能只有原作者(Mike Lischke)才能回答这个问题。
猜你喜欢
  • 1970-01-01
  • 2010-12-02
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多