summaryrefslogtreecommitdiff
path: root/ACE/examples/APG/Reactor/Timers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/examples/APG/Reactor/Timers.cpp')
-rw-r--r--ACE/examples/APG/Reactor/Timers.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/ACE/examples/APG/Reactor/Timers.cpp b/ACE/examples/APG/Reactor/Timers.cpp
new file mode 100644
index 00000000000..15c1204a95b
--- /dev/null
+++ b/ACE/examples/APG/Reactor/Timers.cpp
@@ -0,0 +1,82 @@
+// $Id$
+
+#include "ace/config-all.h"
+#include "ace/OS_main.h"
+
+#if !defined (ACE_LACKS_FORK)
+
+#include "ace/streams.h"
+#include "ace/OS_NS_unistd.h"
+#include "ace/OS_NS_time.h"
+#include "ace/OS_NS_signal.h"
+
+typedef void (*timerTask_t)(void);
+
+// Listing 1 code/ch07
+pid_t timerTask (int initialDelay,
+ int interval,
+ timerTask_t task)
+{
+ if (initialDelay < 1 && interval < 1)
+ return -1;
+
+ pid_t pid = ACE_OS::fork ();
+
+ if (pid < 0)
+ return -1;
+
+ if (pid > 0)
+ return pid;
+
+ if (initialDelay > 0)
+ ACE_OS::sleep (initialDelay);
+
+ if (interval < 1)
+ return 0;
+
+ while (1)
+ {
+ (*task) ();
+ ACE_OS::sleep (interval);
+ }
+
+ ACE_NOTREACHED (return 0);
+}
+// Listing 1
+
+// Listing 2 code/ch07
+void foo ()
+{
+ time_t now = ACE_OS::time (0);
+ cerr << "The time is " << ACE_OS::ctime (&now) << endl;
+}
+// Listing 2
+
+void programMainLoop (void)
+{
+ ACE_OS::sleep (30);
+}
+
+// Listing 3 code/ch07
+int ACE_TMAIN (int, ACE_TCHAR *[])
+{
+ pid_t timerId = timerTask (3, 5, foo);
+ programMainLoop ();
+ ACE_OS::kill (timerId, SIGINT);
+ return 0;
+}
+// Listing 3
+
+#else
+#include "ace/OS_NS_stdio.h"
+
+int ACE_TMAIN (int, ACE_TCHAR *[])
+{
+ //FUZZ: disable check_for_lack_ACE_OS
+ ACE_OS::puts ("This very unportable example requires fork().\n");
+ //FUZZ: enable check_for_lack_ACE_OS
+
+ return 0;
+}
+
+#endif /* ACE_LACKS_FORK */