canmeng50401的专栏
导航
C++博客
首页
新随笔
联系
聚合
管理
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
随笔分类
批处理(1)
(rss)
一些软件的应用(4)
(rss)
文章分类
__IT趣闻(3)
(rss)
windbg和gdb调试
(rss)
windows驱动开发技术详解 笔记(5)
(rss)
汇编编程
(rss)
应用编程(7)
(rss)
随笔档案
2012年4月 (1)
2011年11月 (2)
2011年9月 (2)
文章档案
2011年9月 (6)
2011年6月 (6)
2011年5月 (3)
相册
网上找的喜欢的图片
我的照片
统计
随笔 - 5
文章 - 15
评论 - 0
引用 - 0
留言簿
给我留言
查看公开留言
查看私人留言
阅读排行榜
1. DOS批处理中%cd%和%~dp0的异同(804)
2. 进程间通信:使用file-mapping kernel object(文件映射内核对象)(657)
3. 再论extern “C”:C代码调用C++代码(410)
4. 再论extern “C”:C++代码调用C代码 .(403)
5. 在console mode 中使用 C/C++ 编译器 .(243)
评论排行榜
1. DOS批处理中%cd%和%~dp0的异同(0)
2. 在console mode 中使用 C/C++ 编译器 .(0)
3. 再论extern “C”:C++代码调用C代码 .(0)
4. 再论extern “C”:C代码调用C++代码(0)
5. 进程间通信:使用file-mapping kernel object(文件映射内核对象)(0)
使用 event object 来进行线程间的同步
用户态使用createEvent()来创建并初始化一个event object。
内核态使用KEVENT类型来创建一个event object,使用KeInitializeEventObject()来初始化一个event object。
一个event object有两种状态:nonsignaled和signaled
。使用
ResetEvent()
函数将event object的状态设置为nonsignaled。使用
SetEvent()
函数将event object的状态设置为signaled。
WaitForSingleObject
()
函数的参数是一个event object,当这个event object的状态为nonsignaled状态时,此函数会一直等待,一直到这个event object的状态变化为signaled,函数才会返回。
WaitForMultipleObjects()
函数的第三个参数是一个bool型变量,当为true的时候,那么等待的那几个event object的状态全部为signaled的时候,函数才返回;当为false的时候,那么等待的那几个event object中的任意一个的状态变为signaled,函数就返回。
我觉得event object就是一个bool型的变量。
下面是今天晚上从书上摘抄的一段代码:
#include
<
windows.h
>
#include
<
stddef.h
>
#include
<
stdlib.h
>
#include
<
conio.h
>
#include
<
stdio.h
>
ULONG WINAPI Thread1(LPVOID para)
{
printf(
"
Enter Thread1!\n
"
);
HANDLE
*
phEvent
=
(HANDLE
*
)para;
//
设置该事件激发
SetEvent(
*
phEvent);
printf(
"
Leave Thread1!\n
"
);
return
0
;
}
int
main()
{
//
创建同步事件
HANDLE hEvent
=
CreateEvent(NULL,FALSE,FALSE,NULL);
//
开启新线程,并将同步事件句柄指针传递给新线程
HANDLE hThread1
=
(HANDLE)CreateThread(NULL,
0
,Thread1,
&
hEvent,
0
,NULL);
//
等待该事件触发
WaitForSingleObject(hEvent,INFINITE);
printf(
"
Leave ThreadMain!\n
"
);
return
0
;
}
代码的运行结果比较奇怪,如下图所示:
我不懂为什么“Leave Thread1”会打印两次。应该只打印一次就结束的啊???………
posted on 2011-05-21 22:45
纪灿萌
阅读(275)
评论(0)
编辑
收藏
引用
所属分类:
应用编程
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
IDE 不是程序员的唯一选择(六)(终)
IDE 不是程序员的唯一选择(五)
IDE 不是程序员的唯一选择(四)
IDE 不是程序员的唯一选择(三)
IDE 不是程序员的唯一选择(二)
IDE 不是程序员的唯一选择(一)
使用 event object 来进行线程间的同步
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
Powered by:
C++博客
Copyright © 纪灿萌