我需要多个使用具有相同EventID的::SetTimer函数的计时器。使用::CreateWindow创建多个窗口句柄,然后将每个计时器分配给创建的窗口句柄,这可能/一个好主意吗?还有其他选择吗?编辑:无论如何,我只想知道这里发生了什么:inteventID=0;hWnd1=::CreateWindow(...);hWnd2=::CreateWindow(...);::SetTimer(hWnd1,eventID,...);::SetTimer(hWnd2,eventID,...);是否每个hWnd都有自己的eventID列表?他们是独立处理的吗?我不想讨论这个设计是否有意义..
我需要定时器每1秒启动一次功能。我试过SetTimer,我的代码:constUINT_PTRTIMER_ID=1000;DWORDDownloadThread(){SetTimer(NULL,TIMER_ID,1000,(TIMERPROC)DownloadSpeedCounter);/*somestuff*/}voidDownloadSpeedCounter(){/*somestuff*/}我无法编译此代码并得到errorC2440:'typecast':cannotconvertfrom'overloaded-function'to'TIMERPROC'也是类成员方法。
我想为一个窗口设置一个定时器,但我不知道那个窗口是否已经有定时器在运行。如果是这样,我不想覆盖其中任何一个,所以我需要选择一个免费的计时器ID。MSDN对我的情况没有帮助,他们描述了几乎所有的排列,除非你有一个hwnd并且不想更换计时器。因此,如果可以将0或其他内容作为nIDEvent并让Windows自动创建一个新的uniqeid,或者是否有某种方法可以列出当前正在运行的计时器以便我可以避免使用其中的任何一个?SetTimer的MSDN:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644906%28v=vs.85
使用SetTimer时这样:SetTimer(hWnd,IDT_TIMER_LONGPROCESSING,2000,(TIMERPROC)NULL);DoSomethingElse();执行会立即继续(即它是非阻塞并且DoSomethingElse()会立即执行),但是当此消息到达时caseWM_TIMER:if(wParam==IDT_TIMER_LONGPROCESSING)DoAOneSecondLongJob();然后它在1秒长的处理过程中再次阻塞“窗口消息循环”,导致界面无响应。这是SetTimer的正常行为,只是发布一条计时器消息。但我看到SetTimer也可以以第二种方式
当我尝试使用WindowsSetTimer函数时,它会为计时器生成一个IDEvent,即使我已经指定了一个!这个:SetTimer(0,999,10000,@timerproc);在:proceduretimerproc(hwnd:HWND;uMsg:UINT;idEvent:UINT_PTR;dwTime:DWORD);stdcall;beginKillTimer(0,idEvent);showmessage(inttostr(idevent));end;返回:随机数!是否可以自己管理我的计时器而不是Windows为我选择?非常感谢! 最佳答案
我尝试使用SetTimerAPI每隔X分钟调用一个函数。所以,我写了这段测试代码voidf(){printf("Hello");}intmain(){SetTimer(NULL,0,1000*60,(TIMERPROC)&f);}我应该每分钟都写下你好,但它不起作用。 最佳答案 你的程序有几个问题:C程序在离开main()时确实会结束,因此没有时间可以触发计时器。Win32计时器需要消息泵(见下文)才能工作,因为它们是通过WM_TIMER消息实现的,即使它们没有与任何窗口相关联,并且如果您提供函数回调。Whenyouspecifya
我的C++应用程序有一个无窗口计时器,用于定期清理从未(也永远不会)完全处理的潜在通信数据。问题是永远不会调用回调函数。我的类构造函数在返回之前执行以下代码:if((this->m_hMsgsThread=::CreateThread(NULL,//nosecurityattributes0,//usedefaultinitialstacksizereinterpret_cast(MessagesThreadFn),//functiontoexecuteinnewthreadthis,//threadparameters0,//usedefaultcreationsettingsNUL
我有一个无窗口计时器(没有WM_TIMER),它只在给定的时间段过去后触发一次回调函数。它作为SetTimer()/KillTimer()实现。时间段足够小:100-300毫秒。对于每个如此短的时间间隔调用SetTimer()/KillTimer()对是否足够便宜(我的意思是性能)?如果我有100个周期性调用SetTimer()/KillTimer()的定时器会怎样?系统中可以同时存在多少个Window定时器对象?问题是:使用一堆这样的计时器对象并依赖于良好的Windows计时器实现,或者创建一个每30毫秒计时一次的Windows计时器对象,并为它订阅所有自定义的100-300毫秒一次
我有一个控制台应用程序正在使用一个DLL文件,该文件使用SetTimer()调用来创建计时器并在其自身内部触发一个函数。调用如下:SetTimer((HWND)NULL,0,timer_num,(TIMERPROC)UnSyncMsgTimer))==0)它期望收到定时器消息,但这从未发生过。我假设是因为我的是控制台应用程序而不是标准的WindowsGUI应用程序(比如最初使用DLL文件的地方)。这会使DLL文件功能的关键部分停止工作。我的应用程序需要保留为控制台应用程序,我无法更改DLL。是否有变通办法来使这项工作正常进行? 最佳答案
我在一个类的函数中调用SetTimer。SetTimer(NULL,0,10000,(TIMERPROC)TimerCallBack);TimerCallBack在哪里:staticVOIDCALLBACKTimerCallBack(HWND,UINT,UINT,DWORD)现在我需要调用启动计时器的类方法之一,因为TimerCallBack是静态的,它不再可以访问类对象。我找不到任何方法将对象指针与SetTimer一起传递,以便我可以在回调函数中接收它。有没有其他方法可以实现这一点,如果不支持使用SetTimer,那么我可以通过哪种其他方式实现这一点。 最