GE
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
Interrupt-driven, with periodic task
#include <GE.h>
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
#include <GE.h>
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
Polling-driven
#include <GE.h>
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;
}