优化手表代码

我想实现一个代码保持注视假设某个事件......在此期间,我不要有任何内在eventwatcher所以我HV实现mine..which之一消耗最少的CPU和内存。

u能表明我的..

例如一个伪代码给出:

while(true) { if(process.isrunning) process.kill(); }

--------------解决方案-------------

如果你没有任何事件挂钩到,那么你的代码必须是“积极的”,以运行检查。 而这花费的CPU周期。

什么,你可以做轻松的废物是添加一个调用睡眠(Thread.sleep代码在.NET中,睡眠在C中的一些实现++)。

while (true) {
if(process.isrunning)
process.kill();

sleep(100); // Wait 100 millisecond before trying again
}

但是,这将使你的代码少一点反应。

您可以尝试使用定时器队列:http://msdn.microsoft.com/en-us/library/ms687003%28VS.85%29.aspx它基本上都采用内核调度打电话给你的回调函数指定的间隔,主叫方是不同的线程,这样它就不会中断主线程,使您的应用程序响应,该线程Windows管理的,所以你不必管理自己的线程池,其相对准确。

实施例如:`

//a singleton class that hold timer queue
class TimerQueue {
protected:
HANDLE timerQueue;
TimerQueue() {
this->timerQueue = ::CreateTimerQueue();
}
~TimerQueue() {
if(this->timerQueue) {
::DeleteTimerQueueEx(this->timerQueue,NULL);
this->timerQueue = NULL;
}
}
public:
static HANDLE getHandle() {
static TimerQueue timerQueueSingleton;
return timerQueueSingleton.timerQueue;
}
}

//timer base class
class Timer
{
protected:
HANDLE timer;
virtual void timerProc() = 0;
static void CALLBACK timerCallback(PVOID param,BOOLEAN timerOrWait) {
Timer* self = (Timer*)param;
self->timerProc();
}
public:
Timer(DWORD startTimeMs,DWORD periodTimeMs) {
if(!::CreateTimerQueueTimer( &this->timer, TimerQueue::getHandle(),
(WAITORTIMERCALLBACK)&this->timerCallback,
this, startTimeMs, periodTimeMs,
WT_EXECUTEDEFAULT) ) {
this->timer = NULL;
}
}
virtual ~Timer() {
if(this->timer) {
::DeleteTimerQueueTimer(TimerQueue::getHandle(),&this->timer,NULL);
this->timer = NULL;
}
}
}

//derive and implement timerProc
class MyTimer : public Timer
{
protected:
virtual void timerProc() {
if(process.isRunning()) {
process.kill();
}
}
public:
MyTimer(DWORD startTimeMs,DWORD periodTimeMs)
: Timer(startTimeMs,periodTimeMs) {}
}

//usage:
int main(int argc,char* argv[]) {
MyTimer timer(0,100); //start immediately, at 10 Hz interval
}

`

免责声明:我不测试或编译这些代码,你应该重新检查它

虽然你已经标记这是语言无关,任何良好的实施将会有很大的不同不仅仅是从一种语言到另一种,但跨操作系统。 有很多情况下的程序或操作系统功能需要做的只是这样的事情,和机制,将已经实现,为此在为明智的,非侵入的方式可能。

如果你有一个特定的语言和/或操作系统的想法,请告诉我们,让我们更好地了解你想要达到的目的。 通过这种方式,我们可以为您指出在最合适的多种可能的解决这个问题的。

分类:语言无关 时间:2015-03-15 人气:0
本文关键词: 语言无关
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.513 (s). 10 q(s)