Difference between revisions of "GE"
(→Polling-driven) |
(→Polling-driven) |
||
Line 93: | Line 93: | ||
while(!done) | while(!done) | ||
{ | { | ||
+ | t0 = get_time(); | ||
+ | |||
GE_PumpEvents();//retrieve all pending events and return (does not block) | GE_PumpEvents();//retrieve all pending events and return (does not block) | ||
Line 107: | Line 109: | ||
//do something periodically | //do something periodically | ||
− | usleep( | + | t1 = get_time(); |
+ | time_to_sleep = t1-t0;//avoid the period to drift | ||
+ | |||
+ | usleep(PERIOD - time_to_sleep);//sleep some time (removing this would hug the cpu...) | ||
} | } | ||
Revision as of 11:14, 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 gives pseudo-code examples.
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) { t0 = get_time(); 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 t1 = get_time(); time_to_sleep = t1-t0;//avoid the period to drift usleep(PERIOD - time_to_sleep);//sleep some time (removing this would hug the cpu...) } GE_quit(); return 0; }