Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2707521
  • 博文数量: 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-15 10:55:06

创建信号灯, 一种内核对象的同步方式  

  使用步骤如下  
  1,创建信号灯  
  HANDLE   hCounter   =   CreateSemaphore(NULL,2,2,"iCounter")  
  2,打开信号灯  
  hCounterIn=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"iCounter")  
  3, 等待信号灯WaitForSingleObject(hCounterIn,INFINITE);   或
     dwWait = WaitForMultipleObjects(2, hWait, FALSE, INFINITE);
  4, 释放信号灯ReleaseSemaphore(hCounterIn,1,NULL);   
  5, 关闭句柄了CloseHandle(hCounter)

信号量,Event   等等这些东西   用来实现多进程/多线程通讯  


进程1    
  {  
      HANDLE     hEvent     =     CreateEvent(     NULL,     TRUE,     FALSE,     "MyName"     );  
      getch();  
      SetEvent(     hEvent     );//传递信号  
      CloseHandle(     hEvent     );  
      return     0;  
  }  
  进程2  
      HANDLE     hEvent     =     OpenEvent(     SYNCHRONIZE,     FALSE,     "MyName"     );  
      if(     hEvent     !=     NULL     )  
      {  
          WaitForSingleObject(     hEvent,     INFINITE     );  
      MessageBox(NULL,   "接收到信号",0   ,MB_ICONINFORMATION);  
            CloseHandle(     hEvent     );  
  }  
  return   0;  

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

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);
 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;
}

阅读(2391) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

pamire2010-10-28 10:33:34

对于带脏话、骂人的留言会直接删除,只能说此种人需要进一步提高自己的修养。若有问题可以讨论解决

chinaunix网友2008-12-18 22:09:36

http://www.cppblog.com/fwxjj/archive/2008/07/30/57533.html http://274387.blog.51cto.com/264387/60969 http://www.cs.sysu.edu.cn/OS-course/course/03-4-2.htm http://www.cppblog.com/sandy/archive/2006/01/12/2690.html

chinaunix网友2008-12-15 11:07:00

4 种进程或线程同步互斥的控制方法: http://www.aspcool.com/lanmu/browse1.asp?ID=1252&bbsuser=csharp