3
#include <winpr/thread.h>
4
#include <winpr/collections.h>
6
static void* message_echo_pipe_client_thread(void* arg)
14
pipe = (wMessagePipe*) arg;
18
MessageQueue_Post(pipe->In, NULL, 0, (void*) (size_t) index, NULL);
20
if (!MessageQueue_Wait(pipe->Out))
23
if (!MessageQueue_Peek(pipe->Out, &message, TRUE))
26
if (message.id == WMQ_QUIT)
29
count = (int) (size_t) message.wParam;
32
printf("Echo count mismatch: Actual: %d, Expected: %d\n", count, index);
37
MessageQueue_PostQuit(pipe->In, 0);
42
static void* message_echo_pipe_server_thread(void* arg)
48
pipe = (wMessagePipe*) arg;
50
while (MessageQueue_Wait(pipe->In))
52
if (MessageQueue_Peek(pipe->In, &message, TRUE))
54
if (message.id == WMQ_QUIT)
57
count = (int) (size_t) message.wParam;
59
MessageQueue_Dispatch(pipe->Out, &message);
66
int TestMessagePipe(int argc, char* argv[])
70
wMessagePipe* EchoPipe;
72
EchoPipe = MessagePipe_New();
74
ClientThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) message_echo_pipe_client_thread, (void*) EchoPipe, 0, NULL);
75
ServerThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) message_echo_pipe_server_thread, (void*) EchoPipe, 0, NULL);
77
WaitForSingleObject(ClientThread, INFINITE);
78
WaitForSingleObject(ServerThread, INFINITE);