Main Page   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members  

event_trigger_unix.cpp

Go to the documentation of this file.
00001 
00002 #include "Core/precomp.h"
00003 #include "event_trigger_unix.h"
00004 
00005 #include <sys/time.h>
00006 #include <sys/types.h>
00007 #include <unistd.h>
00008 
00010 // CL_EventTrigger_Unix construction:
00011 
00012 CL_EventTrigger_Unix::CL_EventTrigger_Unix()
00013 {
00014         pipe(wait_pipe);
00015 }
00016 
00017 CL_EventTrigger_Unix::~CL_EventTrigger_Unix()
00018 {
00019         close(wait_pipe[0]);
00020         close(wait_pipe[1]);
00021 }
00022 
00024 // CL_EventTrigger_Unix attributes:
00025 
00026 bool CL_EventTrigger_Unix::get_flag() const
00027 {
00028         return wait(0);
00029 }
00030 
00032 // CL_EventTrigger_Unix operations:
00033 
00034 void CL_EventTrigger_Unix::reset() const
00035 {
00036         char v = 0;
00037         while (wait(0)) read(wait_pipe[0], &v, 1);
00038 }
00039 
00040 void CL_EventTrigger_Unix::set_flag()
00041 {
00042         char v = 1;
00043         if (!wait(0)) write(wait_pipe[1], &v, 1);
00044 }
00045 
00046 bool CL_EventTrigger_Unix::wait(int timeout) const
00047 {
00048         fd_set rfds;
00049         FD_ZERO(&rfds);
00050         FD_SET(wait_pipe[0], &rfds);
00051 
00052         timeval tv;
00053         tv.tv_sec = 0;
00054         tv.tv_usec = timeout;
00055 
00056         int result = select(wait_pipe[0]+1, &rfds, NULL, NULL, (timeout == 1) ? NULL : &tv);
00057         if (result <= 0) return false;
00058 
00059         return true;
00060 }
00061 
00063 // CL_EventTrigger_Unix implementation:

Generated at Wed Apr 4 19:54:00 2001 for ClanLib by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001