Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2648975
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2008-12-19 11:00:19

原址:http://274387.blog.51cto.com/264387/60969

1个线程时测试:
HANDLE hThread;
HANDLE hEvent;
DWORD WINAPI ThreadProc1( LPVOID lpParamenter);int main(int argc, char* argv[]){
 // 更改第二个参数你会发现PulseEvent的用处,第三个参数用来设置初始状态是Singled还是Unsingled。
 hEvent = CreateEvent(NULL, TRUE, TRUE, "abc");
 hThread = CreateThread(NULL, NULL, ThreadProc1, NULL, NULL, NULL);
 Sleep(1);
 printf("1\n");
 PulseEvent(hEvent);
 Sleep(1);
 printf("2\n");
 SetEvent(hEvent);
 Sleep(1);
 printf("3\n");
 ResetEvent(hEvent);
 Sleep(1);
 printf("4\n");
 PulseEvent(hEvent);
 Sleep(1);
 printf("5\n");
 TerminateThread(hThread, NULL);
 printf("Hello World!\n");
 return 0;
}
DWORD WINAPI ThreadProc1( LPVOID lParamenter )
{
 int iCount = 0;
 while( true )
 {
  printf("xx%d\t", iCount++);
  WaitForSingleObject(hEvent, INFINITE);
  printf("**%d\t", iCount++);
 }
 return NULL;
}

***********************************************************
2个线程时测试:

HANDLE hThread;
HANDLE hThread2;
HANDLE hEvent;
DWORD WINAPI ThreadProc1( LPVOID lpParamenter);
DWORD WINAPI ThreadProc2( LPVOID lpParamenter);
int main(int argc, char* argv[]){
 // 更改第二个参数你会发现PulseEvent的用处,第三个参数用来设置初始状态是Signed还是Unsingled。
 hEvent = CreateEvent(NULL, TRUE, TRUE, "abc");
 hThread = CreateThread(NULL, NULL, ThreadProc1, NULL, NULL, NULL);
 hThread2 = CreateThread(NULL, NULL, ThreadProc2, NULL, NULL, NULL);
 Sleep(2);
 printf("1\n");
 PulseEvent(hEvent);
 Sleep(2);
 printf("2\n");
 SetEvent(hEvent);
 Sleep(2);
 printf("3\n");
 ResetEvent(hEvent);
 Sleep(2);
 printf("4\n");
 PulseEvent(hEvent);
 Sleep(2);
 printf("5\n");
 TerminateThread(hThread, NULL);
 printf("Hello World!\n");
 return 0;
}
DWORD WINAPI ThreadProc1( LPVOID lParamenter )
{
 int iCount = 0;
 while( true )
 {
  printf("xx%d\t", iCount++);
  WaitForSingleObject(hEvent, INFINITE);
  printf("**%d\t", iCount++);
 }
 return NULL;
}

DWORD WINAPI ThreadProc2( LPVOID lParamenter )
{
 int iCount = 0;
 while( true )
 {
  printf("MM%d\t", iCount++);
  WaitForSingleObject(hEvent, INFINITE);
  printf("WW%d\t", iCount++);
 }
 return NULL;
}


头文件: stdio.h,windows.h(winbase.h)
关键函数:
    CreateEvent             创建事件对象函数
    SetEvent                设置事件对象为Singled
    ResetEvent              设置事件对象为Unsingled
    PulseEvent              将指定的事件设为Singled。如果是一个人工重设事件,正在等候事件的、被挂起的所有线程都会进入活动状态。函数随后将事件设回,并返回。如果是一个自动重设事件,则正在等候事件的、被挂起的单个线程会进入活动状态。事件随后设回Unsingled,并且函数返回
    WaitForSingleObject     等待对象函数


在自动重置模式下PulseEvent和SetEvent的作用没有什么区别,但在手动模式下PulseEvent就有明显的不同,你可以比较容易的控制程序是单步走,还是连续走。如果让循环按要求执行一次就用PulseEvent,如果想让循环连续不停的运转就用SetEvent,在要求停止的地方发个ResetEvent就OK了。
阅读(1735) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~