1. #include <gio/gio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. gpointer pop_data_timed(void) {
  5. gboolean current_data = 0;
  6. gint64 end_time;
  7. gpointer data;
  8. GCond data_cond;
  9. GMutex data_mutex;
  10. g_print("start timer: %ld\n", g_get_monotonic_time());
  11. g_mutex_lock(&data_mutex);
  12. end_time = g_get_monotonic_time() + 5 * G_TIME_SPAN_SECOND;
  13. g_print("wait until: %ld\n", end_time);
  14. while (!current_data) {
  15. g_print("while\n");
  16. if (!g_cond_wait_until(&data_cond, &data_mutex, end_time)) {
  17. g_print("timeout: %ld\n", g_get_monotonic_time());
  18. g_mutex_unlock(&data_mutex);
  19. return NULL;
  20. }
  21. }
  22. g_mutex_unlock(&data_mutex);
  23. return data;
  24. }
  25. int main(int argc, char **argv) {
  26. GApplication *app;
  27. int status;
  28. app = g_application_new("org.gtk.TestApplication", G_APPLICATION_HANDLES_COMMAND_LINE);
  29. g_signal_connect(app, "command-line", G_CALLBACK(pop_data_timed), NULL);
  30. g_application_set_inactivity_timeout(app, 10000);
  31. status = g_application_run(app, argc, argv);
  32. g_object_unref(app);
  33. return status;
  34. }