mrfioc2  2.3.0
pollirq.cpp
Go to the documentation of this file.
1 
2 #include <epicsThread.h>
3 #include <epicsEvent.h>
4 #include <epicsMutex.h>
5 #include <epicsGuard.h>
6 #define epicsExportSharedSymbols
7 #include "mrf/pollirq.h"
8 
9 IRQPoller::IRQPoller(pollerFN fn, void *arg, double period)
10  :done(false)
11  ,period(0.1)
12  ,fn(fn)
13  ,arg(arg)
14  ,runner(*this, "IRQPoller",
15  epicsThreadGetStackSize(epicsThreadStackBig),
16  epicsThreadPriorityHigh)
17 {
18  runner.start();
19 }
20 
22 {
23  {
24  epicsGuard<epicsMutex> G(lock);
25  done = true;
26  }
27  runner.exitWait();
28 }
29 
30 void IRQPoller::run()
31 {
32  epicsGuard<epicsMutex> G(lock);
33  while(!done) {
34  double P = period;
35  {
36  epicsGuardRelease<epicsMutex> U(G);
37  epicsThreadSleep(P);
38  }
39 
40  (*fn)(arg);
41  }
42 }
void(* pollerFN)(void *)
Definition: pollirq.h:10
IRQPoller(pollerFN fn, void *arg, double period)
Definition: pollirq.cpp:9
virtual ~IRQPoller()
Definition: pollirq.cpp:21