Difference between revisions of "GE"
|  (Created page with "=The GIMX Event Library=  GE is a cross-platform event library that can be used in Windows or Linux. In Linux, it directly interfaces with [http://en.wikipedia.org/wiki/Evdev ...") |  (→Interrupt-driven (with periodic task)) | ||
| Line 62: | Line 62: | ||
|      { |      { | ||
|        GE_PumpEvents();//blocks until timer fires |        GE_PumpEvents();//blocks until timer fires | ||
| − | + | ||
|        //do something periodically |        //do something periodically | ||
|      } |      } | ||
Revision as of 19:28, 13 January 2013
Contents
The GIMX Event Library
GE is a cross-platform event library that can be used in Windows or Linux. In Linux, it directly interfaces with evdev. In Windows, it uses a modified SDL library.
This page shows how to use it.
Linux examples
Polling-driven
 int process_event(GE_Event* event)
 {
   //handle the event
 }
 
 int main(int argc, char* argv[])
 {
   if (!GE_initialize())
   {
     //handle the error
   }
 
   struct timespec period = {.tv_sec = 0, .tv_nsec = 10000000};
 
   GE_TimerStart(&period);
 
   GE_SetCallback(process_event);
 
   while(!done)
   {
     GE_PumpEvents();
   }
 
   GE_quit();
   
   return 0;
 }
Interrupt-driven (with periodic task)
 int process_event(GE_Event* event)
 {
   //handle the event
 }
 
 int main(int argc, char* argv[])
 {
   if (!GE_initialize())
   {
     //handle the error
   }
 
   struct timespec period = {.tv_sec = 0, .tv_nsec = 10000000};
 
   GE_TimerStart(&period);
 
   GE_SetCallback(process_event);
 
   while(!done)
   {
     GE_PumpEvents();//blocks until timer fires
 
     //do something periodically
   }
 
   GE_quit();
   
   return 0;
 }
Interrupt-driven (without periodic task)
 int process_event(GE_Event* event)
 {
   //handle the event
 }
 
 int main(int argc, char* argv[])
 {
   if (!GE_initialize())
   {
     //handle the error
   }
 
   GE_SetCallback(GE_PushEvent);
 
   while(!done)
   {
     GE_PumpEvents();//retrieve 1 event and return (blocks until event reception)
num_evt = GE_PeepEvents(events, sizeof(events) / sizeof(events[0]));
     if (num_evt > 0)
     {
       for (event = events; event < events + num_evt; ++event)
       {
         //process the event
       }
     }
   }
 
   GE_quit();
   
   return 0;
 }
Windows example
Polling-driven
 int main(int argc, char* argv[])
 {
   if (!GE_initialize())
   {
     //handle the error
   }
 
   while(!done)
   {
     GE_PumpEvents();//retrieve all available events and return (does not block)
num_evt = GE_PeepEvents(events, sizeof(events) / sizeof(events[0]));
     if (num_evt > 0)
     {
       for (event = events; event < events + num_evt; ++event)
       {
         //process the event
       }
     }
usleep(1000);//sleep some time } GE_quit(); return 0; }
