草庐IT

c++ - 高精度事件定时器

#include"target.h"#include"xcp.h"#include"LocatedVars.h"#include"osek.h"/***Thistaskisactivatedevery10ms.*/longOSTICKDURATION;TASK(Task10ms){voidXCP_FN_TYPEXcp_CmdProcessor(void);uint32startTime=GetQueryPerformanceCounter();/*TriggerDAQforthe10msXCPraster.*/if(XCPEVENT_DAQ_OVERLOAD&Xcp_DoDaqForE

c# - 每 X 分钟最大化一次窗口

我正在开发C#桌面应用程序。我希望所有打开的窗口每5分钟弹出一次(使用Alt+Tab时发生的事情)。我在这里看了几个问题。他们建议通过使用计时器来实现,但我如何弹出最小化的窗口? 最佳答案 这是一个非常基本的示例,供您处理。首先创建定时器。创建一个在计时器计时结束时运行的函数。然后添加一个事件,让它在每次滴答时运行。并将其链接到您的函数在该函数中检查是否已经过了5分钟。如果是这样,最大化windowpublicpartialclassTimerForm:Form{Timertimer=newTimer();Labellabel=ne

windows - 奇怪的可等待计时器 "aligning"问题

我遇到了可等待计时器的奇怪行为。如果我以一秒为周期创建它,那么在第一次触发之后,它的后续触发似乎与某个毫秒值“对齐”,这与第一次触发有很大不同。这里是触发时间的例子(小时:分钟:秒.毫秒):18:06:25.753如果我重新运行程序,第一次触发的毫秒值不同,但后续事件再次发生在238值。这是我使用的测试代码:int_tmain(intargc,_TCHAR*argv[]){HANDLEhTimer=CreateWaitableTimer(NULL,FALSE,NULL);LARGE_INTEGERdueTime;dueTime.QuadPart=0;SetWaitableTimer(h

c++ - 用于定期调用的现代高分辨率定时器

关于stackoverflow上的高分辨率计时器已经有大量讨论。但很明显,解决方案是一个移动的目标,最佳实践也在发生变化。我需要创建一个高分辨率计时器,每10毫秒回调一次,以实现一致的100Hz。目标平台是Windows7及更高版本。这exactquestionwasaskedin2009,但我相信事情可能已经发生了变化。多媒体计时器看起来是一个很好的解决方案,但MSDN说它们是depreciated,替换为CreateTimerQueueTimer。但是stackoverflow上的其他答案表明CreateTimerQueue计时器不如timeSetEvent准确。所有答案都一致指出

.net - Threading.Timer的麻烦

我正在使用Threading.Timer,例如:newSystem.Threading.Timer(newSystem.Threading.TimerCallback(x=>file.Write(DateTime.Now.ToString())),null,0,600000);例如,它从11:00:00开始,然后我进入文件:11:00:0011:10:0011:20:00...12:10:0012:19:5912:29:59为什么?从某个时间开始做这样的事情?我试过其他定时器,像Timers.Timer,和winformsTimer,情况一样。这让我很沮丧。编辑:在线程中发布的带有准确

c++ - 高分辨率定时器与低分辨率定时器

最近在看高分辨率和低分辨率定时器,不是很懂。他们是如何运作的?它们不是都通过检查计算机硬件上的内部系统时钟来运行吗?如果是这样,是否意味着更高的分辨率只会更频繁地检查它,消耗更多的资源?我使用低分辨率计时器有什么问题吗?当该计时器到期时在高分辨率计时器应该停止的一秒(或更短)内启动高分辨率计时器?或者这会因为某种原因不起作用吗?与低分辨率计时器相比,高分辨率计时器消耗的资源究竟多多少? 最佳答案 通常,低分辨率计时器会每隔x时间(例如,每1、5、10、16.6667、17.81291或20毫秒-例如,它可能有许多其他值)向处理器发出

windows - Delphi定时器比毫秒更精确

我在Delphi中有一个程序,它以25赫兹(每秒25次)的速度从外部应用程序接收帧,然后通过创建1-2个额外的帧将其转换为60赫兹(每秒60帧)。我需要通过不断构建帧缓冲区并从此处从单独的线程输出帧来输出这些额外的帧。问题是1000/60是16.66667,这意味着我不能只在16或17毫秒的“间隔”中发送帧,我需要它更精确。我如何在Delphi/Windows中执行此操作? 最佳答案 使用multimediatimer通过Win32APItimeSetEvent()或CreateTimerQueueTimer()功能。

windows - 定时器队列,立即终止一个定时器?

我正在尝试通过使用Windows计时器队列在WindowsGDI上实现高每秒帧数。相关的API是CreateTimerQueue、DeleteTimerQueueEx、CreateTimerQueueTimer,和DeleteTimerQueueTimer。计时器是使用CreateTimerQueueTimer(&m_timer,m_timer_queue,TimerCallback,this,0,20,WT_EXECUTEINTIMERTHREAD);创建的,以实现大约50fps的速度。GDI操作(后台存储中的一些绘制,加上InvalidateRect)不能是异步的,因此我不能选择其

c# - Windows 服务应用程序挂起

背景:-运行WindowServer2008R2。-服务器已使用所有最新更新进行修补。-服务器正在运行5个内置于.NET3.5中的服务,所有这些服务都使用计时器重复检查数据库(主要是每10秒一次)。-这些服务不是CPU/RAM密集型。-服务器没有任何性能和资源问题或瓶颈。在大多数情况下,一切都按预期运行,但有时,某些(或所有)服务会停止工作。我正在将所有应用程序异常记录到文件中,但在失败时没有任何异常。事件记录器中也没有错误,服务管理器将服务视为正在运行。我必须停止服务并再次启动它们才能恢复功能。这种行为是不可预测的,有时需要一周或一个月才能停止工作。此外,有时服务会一起“死亡”,或者

C# Windows 服务计时器未触发

我在Windows服务中使用System.Threading.Timer定期执行一个方法。定时器只触发一次,它不会触发。谁能帮忙。下面是代码privateTimerCallbacktimerDelegate;protectedoverridevoidOnStart(string[]args){timerDelegate=newTimerCallback(DoWork);serviceTimer=newTimer(timerDelegate,null,1000,Timeout.Infinite);}privatevoidDoWork(objectstate){GetMessages();