dispatch_cancel_in_block.c [plain text]
#include <stdlib.h>
#include <notify.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#define KEY "foo.test"
#define COUNT 10
int verbose = 0;
void
doit(dispatch_queue_t q, int n)
{
int i;
int status;
for (i = 0; i < n; ++i)
{
int t;
status = notify_register_dispatch(KEY, &t, q, ^(int x){
printf("handle %d\n", x);
notify_cancel(x);
});
assert(status == NOTIFY_STATUS_OK);
printf("register %d\n", t);
}
notify_post(KEY);
}
int main(int argc, char *argv[])
{
int i, n = COUNT;
int nap = 60;
dispatch_queue_t q = dispatch_queue_create("Notify", NULL);
for (i = 1; i < argc; i++)
{
if (!strcmp(argv[i], "-n")) n = atoi(argv[++i]);
else if (!strcmp(argv[i], "-z")) nap = atoi(argv[++i]);
else if (!strcmp(argv[i], "-v")) verbose = 1;
}
doit(q, n);
dispatch_release(q);
dispatch_main();
return 0;
}