blob: af335824a37f391017edd2e3dc292bde99712f3f [file] [log] [blame]
#include <stdio.h>
#include <limits.h>
#include <dispatch/dispatch.h>
#include <pthread.h>
int
main ()
{
__block int hicount = 1;
dispatch_queue_t queue1, queue2, queue3;
dispatch_group_t group = dispatch_group_create ();
queue1 = dispatch_queue_create ("com.apple.gdb.queue1", NULL);
queue2 = dispatch_queue_create ("com.apple.gdb.queue2", NULL);
queue3 = dispatch_queue_create ("com.apple.gdb.queue3", NULL);
pthread_setname_np ("main execution thread");
dispatch_group_async (group, queue1, ^{sleep (20); puts("queue1 sleep done");});
dispatch_group_async (group, queue1, ^{sleep (20); puts("queue1 sleep done");});
dispatch_group_async (group, queue2, ^{sleep (20); puts("queue2 sleep done");});
dispatch_group_async (group, queue2, ^{sleep (20); puts("queue2 sleep done");});
#if 0
/* This is pretty cool but the extra output makes writing a testsuite
case more difficult so I'm commenting it out. */
dispatch_source_timer_create (DISPATCH_TIMER_INTERVAL, 1 * NSEC_PER_SEC, 0,
NULL, queue3,
^(dispatch_event_t event) {
printf (" hello %d\n", hicount++);
if (hicount == 34)
{
dispatch_release (dispatch_event_get_source (event));
puts ("done saying hello");
}
});
#endif
sleep (1);
puts ("waiting for work group's queues to complete."); // breakpoint here
dispatch_group_wait (group, UINT64_MAX);
puts ("all queues completed");
dispatch_release (queue1);
dispatch_release (queue2);
dispatch_release (queue3);
dispatch_release (group);
return (0);
}