ReactOS
0.4.16-dev-1311-g81a4d83
Toggle main menu visibility
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
v
w
x
Functions
_
a
b
c
d
e
f
g
h
i
l
m
o
p
r
s
t
u
v
w
Variables
_
c
d
e
f
g
h
i
l
m
n
o
p
s
t
u
x
Typedefs
_
a
b
c
d
e
f
g
h
i
l
m
o
p
r
s
t
u
v
w
x
Enumerations
_
a
b
c
d
f
i
l
m
o
p
s
t
w
x
Enumerator
a
b
c
d
e
f
g
h
i
m
n
o
p
r
s
t
u
v
w
x
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
_
a
b
c
d
e
f
h
i
k
l
m
n
o
p
r
s
t
u
v
w
z
Enumerator
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Properties
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Related Functions
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
v
x
Files
File List
File Members
All
$
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
$
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
$
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Examples
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:3789
WINAPI
#define WINAPI
Definition:
msvc.h:6
WM_QUIT
#define WM_QUIT
Definition:
winuser.h:1642
PostThreadMessage
#define PostThreadMessage
Definition:
winuser.h:5918
GetMessage
#define GetMessage
Definition:
winuser.h:5875
PeekMessage
#define PeekMessage
Definition:
winuser.h:5915
WM_USER
#define WM_USER
Definition:
winuser.h:1914
PM_NOREMOVE
#define PM_NOREMOVE
Definition:
winuser.h:1206
modules
rostests
tests
thread_msg
thread_msg.c
Generated on Thu Jun 19 2025 06:09:53 for ReactOS by
1.9.6