Files

66 lines
1.4 KiB
C

#include "pal.h"
#include "pal_debug.h"
PAL_HANDLE event1;
PAL_HANDLE event2;
static int thread1_func(void* args) {
pal_printf("Enter thread 1\n");
DkThreadDelayExecution(3000);
DkEventSet(event1);
pal_printf("Leave thread 1\n");
return 0;
}
static int thread2_func(void* args) {
pal_printf("Enter thread 2\n");
DkThreadDelayExecution(5000);
DkEventSet(event2);
pal_printf("Leave thread 2\n");
return 0;
}
int main(int argc, char** argv) {
pal_printf("Enter Main Thread\n");
PAL_HANDLE thd1;
PAL_HANDLE thd2;
event1 = DkNotificationEventCreate(0);
event2 = DkNotificationEventCreate(0);
thd1 = DkThreadCreate(&thread1_func, 0);
if (!thd1) {
pal_printf("DkThreadCreate failed\n");
return -1;
}
thd2 = DkThreadCreate(&thread2_func, 0);
if (!thd2) {
pal_printf("DkThreadCreate failed\n");
return -1;
}
PAL_HANDLE hdls[2] = {event1, event2};
PAL_FLG events[2] = {PAL_WAIT_READ, PAL_WAIT_READ};
PAL_FLG revents[2] = {0, 0};
PAL_BOL polled = DkStreamsWaitEvents(2, hdls, events, revents, NO_TIMEOUT);
if (!polled) {
pal_printf("DkStreamsWaitEvents did not return any events\n");
return -1;
}
for (int i = 0; i < 2; i++) {
if (revents[i])
pal_printf("event%d is set\n", i + 1);
}
pal_printf("Leave main thread\n");
return 0;
}