Difference between revisions of "GE"
|  (→Polling-driven) | |||
| Line 1: | Line 1: | ||
| =The GIMX Event Library= | =The GIMX Event Library= | ||
| − | GE is a cross-platform event library that can be used in Windows or Linux. | + | GE is a cross-platform event library that can be used in Windows or Linux.<br /> | 
| − | In Linux, it directly interfaces with [http://en.wikipedia.org/wiki/Evdev evdev]. | + | In Linux, it directly interfaces with [http://en.wikipedia.org/wiki/Evdev evdev].<br /> | 
| − | In Windows, it uses a modified SDL library. | + | In Windows, it uses a modified SDL library.<br /> | 
| This page shows how to use it. | This page shows how to use it. | ||
| Line 9: | Line 9: | ||
| =Linux examples= | =Linux examples= | ||
| − | == | + | ==Interrupt-driven, with periodic task== | 
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|    int process_event(GE_Event* event) |    int process_event(GE_Event* event) | ||
| Line 71: | Line 41: | ||
|    } |    } | ||
| − | ==Interrupt-driven  | + | ==Interrupt-driven, without periodic task== | 
|    int process_event(GE_Event* event) |    int process_event(GE_Event* event) | ||
|    { |    { | ||
| − |      // | + |      //process the event | 
|    } |    } | ||
| Line 91: | Line 61: | ||
|        GE_PumpEvents();//retrieve 1 event and return (blocks until event reception) |        GE_PumpEvents();//retrieve 1 event and return (blocks until event reception) | ||
| − |        num_evt = GE_PeepEvents(events,  | + |        num_evt = GE_PeepEvents(events, 1); | 
|        if (num_evt > 0) |        if (num_evt > 0) | ||
|        { |        { | ||
| − | + |          //process the event | |
| − | |||
| − | |||
| − | |||
|        } |        } | ||
|      } |      } | ||
| Line 120: | Line 87: | ||
|      while(!done) |      while(!done) | ||
|      { |      { | ||
| − |        GE_PumpEvents();//retrieve all  | + |        GE_PumpEvents();//retrieve all pending events and return (does not block) | 
|        num_evt = GE_PeepEvents(events, sizeof(events) / sizeof(events[0])); |        num_evt = GE_PeepEvents(events, sizeof(events) / sizeof(events[0])); | ||
| Line 131: | Line 98: | ||
|          } |          } | ||
|        } |        } | ||
| + | |||
| + |       //do something periodically | ||
|        usleep(1000);//sleep some time |        usleep(1000);//sleep some time | ||
Revision as of 09:24, 14 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
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)
 {
   //process 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, 1);
 
     if (num_evt > 0)
     {
       //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 pending 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
       }
     }
 
     //do something periodically
 
     usleep(1000);//sleep some time
   }
 
   GE_quit();
   
   return 0;
 }
