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

event_listener_unix.cpp

Go to the documentation of this file.
00001 
00002 #include "Core/precomp.h"
00003 #include "event_listener_unix.h"
00004 #include "event_trigger_unix.h"
00005 #include "API/Core/System/system.h"
00006 
00007 #include <sys/time.h>
00008 #include <sys/types.h>
00009 #include <unistd.h>
00010 
00012 // CL_EventListener_Unix construction:
00013 
00014 CL_EventListener_Unix::CL_EventListener_Unix(CL_EventListener *owner)
00015 :
00016         CL_EventListener_Generic(owner)
00017 {
00018 }
00019 
00020 CL_EventListener_Unix::~CL_EventListener_Unix()
00021 {
00022 }
00023 
00025 // CL_EventListener_Unix implementation:
00026 
00027 bool CL_EventListener_Unix::wait(int timeout)
00028 {
00029         if (triggers.empty()) // no triggers, just do the sleep.
00030         {
00031                 CL_System::sleep(timeout);
00032                 return false;
00033         }
00034 
00035         fd_set rfds;
00036         FD_ZERO(&rfds);
00037         int highest_fd = -1;
00038 
00039         std::list<CL_EventTrigger_Generic *>::iterator it;
00040         for (it = triggers.begin(); it != triggers.end(); it++)
00041         {
00042                 CL_EventTrigger_Unix *trigger = static_cast<CL_EventTrigger_Unix*>(*it);
00043                 
00044                 if (trigger->wait_pipe[0] > highest_fd) highest_fd = trigger->wait_pipe[0];
00045                 FD_SET(trigger->wait_pipe[0], &rfds);
00046         }
00047         
00048         timeval tv;
00049         tv.tv_sec = 0;
00050         tv.tv_usec = timeout;
00051 
00052         int result = select(
00053                 highest_fd+1,
00054                 &rfds,
00055                 NULL,
00056                 NULL,
00057                 (timeout == 1) ? NULL : &tv);
00058 
00059         if (result <= 0) return false;
00060         return true;
00061 }

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