Globus Toolkit 4.0: Asynchronous Event Handling: Example 2
#include <globus_common.h>
struct test_monitor_s
{
globus_mutex_t mutex;
globus_cond_t cond;
globus_bool_t done;
};
void
user_callback(
void * user_arg)
{
struct test_monitor_s * monitor;
monitor = (struct test_monitor_s *) user_arg;
globus_mutex_lock(&monitor->mutex);
{
fprintf(stdout, "Signaling the wait\n");
monitor->done = GLOBUS_TRUE;
globus_cond_signal(&monitor.cond);
}
globus_mutex_unlock(&monitor->mutex);
}
int
main(
int argc,
char ** argv)
{
struct test_monitor_s monitor;
globus_reltime_t delay;
globus_module_activate(GLOBUS_COMMON_MODULE);
globus_mutex_init(&monitor.mutex, NULL);
globus_cond_init(&monitor.cond, NULL);
monitor.done = GLOBUS_FALSE;
globus_mutex_lock(&monitor.mutex);
{
GlobusTimeReltimeSet(delay, 1, 0);
globus_callback_register_oneshot(
NULL,
&delay,
user_callback,
&monitor);
while(!monitor.done)
{
fprintf(stdout, "waiting...\n");
globus_cond_wait(&monitor.cond, &monitor.mutex);
}
}
globus_mutex_unlock(&monitor.mutex);
globus_module_deactivate(GLOBUS_COMMON_MODULE);
fprintf(stdout, "Done\n");
return 0;
}