return (orig-now).tv_sec*1000000 + (orig-now).tv_usec;
}
-#endif
-
class eMainloop;
// die beiden signalquellen: SocketNotifier...
int fd;
int state;
int requested; // requested events (POLLIN, ...)
+ void activate(int what) { /*emit*/ activated(what); }
public:
/**
* \brief Constructs a eSocketNotifier.
~eSocketNotifier();
PSignal1<void, int> activated;
- void activate(int what) { /*emit*/ activated(what); }
void start();
void stop();
void setRequested(int req) { requested=req; }
};
+#endif
+
class eTimer;
// werden in einer mainloop verarbeitet
int processOneEvent(unsigned int user_timeout, PyObject **res=0, ePyObject additional=ePyObject());
int retval;
int time_offset;
+ int m_is_idle;
pthread_mutex_t recalcLock;
int m_interrupt_requested;
#endif
eMainloop()
- :app_quit_now(0),loop_level(0),retval(0), m_interrupt_requested(0)
+ :app_quit_now(0),loop_level(0),retval(0), m_is_idle(0), m_interrupt_requested(0)
{
existing_loops.push_back(this);
pthread_mutex_init(&recalcLock, 0);
}
- ~eMainloop()
- {
- existing_loops.remove(this);
- pthread_mutex_destroy(&recalcLock);
- }
+ virtual ~eMainloop();
+
int looplevel() { return loop_level; }
#ifndef SWIG
PyObject *poll(SWIG_PYOBJECT(ePyObject) dict, SWIG_PYOBJECT(ePyObject) timeout);
void interruptPoll();
void reset();
+
+ /* m_is_idle needs to be atomic, but it doesn't really matter much, as it's read-only from outside */
+ int isIdle() { return m_is_idle; }
};
/**
}
};
+#ifndef SWIG
// ... und Timer
/**
* \brief Gives a callback after a specified timeout.
bool bSingleShot;
bool bActive;
void addTimeOffset(int);
+ void activate();
public:
/**
* \brief Constructs a timer.
~eTimer() { if (bActive) stop(); }
PSignal0<void> timeout;
- void activate();
bool isActive() { return bActive; }
+
timeval &getNextActivation() { return nextActivation; }
void start(long msec, bool b=false);
void stop();
void changeInterval(long msek);
-#ifndef SWIG
- bool operator<(const eTimer& t) const { return nextActivation < t.nextActivation; }
-#endif
void startLongTimer( int seconds );
+ bool operator<(const eTimer& t) const { return nextActivation < t.nextActivation; }
};
+#endif // SWIG
+
#endif