Difference between revisions of "GE"
(→Interrupt-driven (with periodic task)) |
(→Interrupt-driven (without periodic task)) |
||
Line 90: | Line 90: | ||
{ | { | ||
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, sizeof(events) / sizeof(events[0])); | num_evt = GE_PeepEvents(events, sizeof(events) / sizeof(events[0])); | ||
− | + | ||
if (num_evt > 0) | if (num_evt > 0) | ||
{ | { |
Revision as of 20: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; }