ReactOS
0.4.16-dev-1049-g378a335
thread_msg.c
Go to the documentation of this file.
1
12
#include <windows.h>
13
#include <stdio.h>
14
#include <assert.h>
15
16
HANDLE
hWaitForFailure
;
17
HANDLE
hOkToPostThreadMessage
;
18
HANDLE
hOkToTerminate
;
19
20
DWORD
WINAPI
thread
(
LPVOID
crap )
21
{
22
MSG
msg
;
23
24
/* Failure case ... Wait for the parent to try to post a message
25
before queue creation */
26
printf
(
"Waiting to create the message queue.\n"
);
27
28
WaitForSingleObject
(
hWaitForFailure
,
INFINITE
);
29
30
printf
(
"Creating message queue.\n"
);
31
32
/* "Create" a message queue */
33
PeekMessage
( &
msg
,
NULL
, 0, 0,
PM_NOREMOVE
);
34
35
printf
(
"Signalling the parent that we're ready.\n"
);
36
37
/* Signal that it's ok to post */
38
SetEvent
(
hOkToPostThreadMessage
);
39
40
printf
(
"Listening messages.\n"
);
41
42
/* Now read some messages */
43
while
(
GetMessage
( &
msg
, 0,0,0 ) ) {
44
printf
(
"Received message: %04x %04x %08lx\n"
,
45
(
msg
.message & 0xffff),
46
(
msg
.wParam & 0xffff),
47
msg
.lParam );
48
assert
( !
msg
.hwnd );
49
}
50
51
printf
(
"Finished receiving messages.\n"
);
52
SetEvent
(
hOkToTerminate
);
53
54
return
0;
55
}
56
57
int
main
(
int
argc
,
char
**
argv
)
58
{
59
DWORD
id
;
60
61
printf
(
"Creating events\n"
);
62
63
hOkToPostThreadMessage
=
CreateEvent
(
NULL
,
FALSE
,
FALSE
,
NULL
);
64
hOkToTerminate
=
CreateEvent
(
NULL
,
FALSE
,
FALSE
,
NULL
);
65
hWaitForFailure
=
CreateEvent
(
NULL
,
FALSE
,
FALSE
,
NULL
);
66
67
printf
(
"Created events\n"
);
68
69
if
(
CreateThread
( 0, 0,
thread
, 0, 0, &
id
) ==
NULL
) {
70
printf
(
"Couldn't create one thread.\n"
);
71
return
0;
72
}
73
74
printf
(
"Posting to non-existent queue\n"
);
75
76
/* Check failure case */
77
assert
(
PostThreadMessage
(
id
,
WM_USER
+ 0, 1, 2 ) ==
FALSE
);
78
79
printf
(
"Signalling thread to advance.\n"
);
80
81
SetEvent
(
hWaitForFailure
);
82
83
printf
(
"Waiting for signal from thread.\n"
);
84
WaitForSingleObject
(
hOkToPostThreadMessage
,
INFINITE
);
85
86
printf
(
"Sending three messages, then quit.\n"
);
87
assert
(
PostThreadMessage
(
id
,
WM_USER
+ 0, 1, 2 ) );
88
assert
(
PostThreadMessage
(
id
,
WM_USER
+ 1, 3, 4 ) );
89
Sleep
( 500 );
/* Sleep a bit, so that the queue is empty for a bit. */
90
assert
(
PostThreadMessage
(
id
,
WM_USER
+ 2, 5, 6 ) );
91
assert
(
PostThreadMessage
(
id
,
WM_QUIT
, 0,0 ) );
92
93
WaitForSingleObject
(
hOkToTerminate
,
INFINITE
);
94
printf
(
"Test complete.\n"
);
95
96
return
0;
97
}
argc
static int argc
Definition:
ServiceArgs.c:12
msg
#define msg(x)
Definition:
auth_time.c:54
thread
static HANDLE thread
Definition:
service.c:33
NULL
#define NULL
Definition:
types.h:112
FALSE
#define FALSE
Definition:
types.h:117
CreateThread
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
Definition:
thread.c:137
assert
#define assert(x)
Definition:
debug.h:53
main
int main()
Definition:
test.c:6
INFINITE
#define INFINITE
Definition:
serial.h:102
DWORD
unsigned long DWORD
Definition:
ntddk_ex.h:95
printf
#define printf
Definition:
freeldr.h:97
id
GLuint id
Definition:
glext.h:5910
void
Definition:
nsiface.idl:2307
argv
#define argv
Definition:
mplay32.c:18
WaitForSingleObject
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
Definition:
synch.c:82
Sleep
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
Definition:
synch.c:790
SetEvent
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition:
synch.c:733
hOkToTerminate
HANDLE hOkToTerminate
Definition:
thread_msg.c:18
hOkToPostThreadMessage
HANDLE hOkToPostThreadMessage
Definition:
thread_msg.c:17
hWaitForFailure
HANDLE hWaitForFailure
Definition:
thread_msg.c:16
MSG
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition:
twain.h:1829
CreateEvent
#define CreateEvent
Definition:
winbase.h:3779
WINAPI
#define WINAPI
Definition:
msvc.h:6
WM_QUIT
#define WM_QUIT
Definition:
winuser.h:1634
PostThreadMessage
#define PostThreadMessage
Definition:
winuser.h:5853
GetMessage
#define GetMessage
Definition:
winuser.h:5810
PeekMessage
#define PeekMessage
Definition:
winuser.h:5850
WM_USER
#define WM_USER
Definition:
winuser.h:1906
PM_NOREMOVE
#define PM_NOREMOVE
Definition:
winuser.h:1206
modules
rostests
tests
thread_msg
thread_msg.c
Generated on Mon Apr 28 2025 06:10:18 for ReactOS by
1.9.6