下载首页 | 资讯中心 | 下载分类 | 最近更新 | 排 行 榜 | 国产软件 | 国外软件 | 汉化补丁 |
文章搜索: 分类 关键字 收藏本站设为首页
您的位置:首页网页设计ASP程序 → C#中四种进程或线程同步互斥的控制方法__教程
C#中四种进程或线程同步互斥的控制方法__教程
日期:2007-5-9 18:52:26 人气:174     [ ]
上一页 [1] [2] [3] [4] [5] 下一页

   //设置信号量 2 个资源 2 同时只可以有两个线程访问
   global_Semephore= CreateSemaphore(NULL, 2, 2, NULL);
   this->StartThread();

   // TODO: Add your control notification handler code here
  }
   
  void CSemaphoreDlg::OnBnClickedButtonThree()
  {

  //设置信号量 3 个资源 3 同时只可以有三个线程访问
   global_Semephore= CreateSemaphore(NULL, 3, 3, NULL);
   this->StartThread();
 
  // TODO: Add your control notification handler code here
  } 


  信号量的使用特点使其更适用于对Socket(套接字)程序中线程的同步。例如,网络上的HTTP服务器要对同一时间内访问同一页面的用户数加以限制,这时可以为每一个用户对服务器的页面请求设置一个线程,而页面则是待保护的共享资源,通过使用信号量对线程的同步作用可以确保在任一时刻无论有多少用户对某一页面进行访问,只有不大于设定的最大用户数目的线程能够进行访问,而其他的访问企图则被挂起,只有在有用户退出对此页面的访问后才有可能进入。
事件(Event)

  事件对象也可以通过通知操作的方式来保持线程的同步。并且可以实现不同进程中的线程同步操作。

  信号量包含的几个操作原语:
  CreateEvent() 创建一个信号量
  OpenEvent() 打开一个事件
  SetEvent() 回置事件
  WaitForSingleObject() 等待一个事件
  WaitForMultipleObjects() 等待多个事件

  WaitForMultipleObjects 函数原型:
  WaitForMultipleObjects(
  IN DWORD nCount, // 等待句柄数
  IN CONST HANDLE *lpHandles, //指向句柄数组
  IN BOOL bWaitAll, //是否完全等待标志
  IN DWORD dwMilliseconds //等待时间
  )

  参数nCount指定了要等待的内核对象的数目,存放这些内核对象的数组由lpHandles来指向。fWaitAll对指定的这nCount个内核对象的两种等待方式进行了指定,为TRUE时当所有对象都被通知时函数才会返回,为FALSE则只要其中任何一个得到通知就可以返回。dwMilliseconds在这里的作用与在WaitForSingleObject()中的作用是完全一致的。如果等待超时,函数将返回WAIT_TIMEOUT。

代码:
  //事件数组
  HANDLE global_Events[2];
   
  // 共享资源
  char global_Array[256];
   
  void InitializeArray()
  {
   for(int i = 0;i<256;i++)
   {
   global_Array[i]=I;
   }
  }
   
  UINT Global_ThreadOne(LPVOID pParam)
  {
   CEdit *ptr=(CEdit *)pParam;
   ptr->SetWindowText("");
   for(int i = 0;i<256;i++)
   {
   global_Array[i]=O;
   ptr->SetWindowText(global_Array);
   Sleep(10);
   }
 
  //回置事件
   SetEvent(global_Events[0]);
   return 0;
  }
   
  UINT Global_ThreadTwo(LPVOID pParam)
  {
   CEdit *ptr=(CEdit *)pParam;
   ptr->SetWindowText("");
   for(int i = 0;i<256;i++)
   {
   global_Array[i]=T;
   ptr->SetWindowText(global_Array);
   Sleep(10);
   }
 
  //回置事件
   SetEvent(global_Events[1]);
   return 0;
  }
   
  UINT Global_ThreadThree(LPVOID pParam)
  {
   CEdit *ptr=(CEdit *)pParam;
   ptr->SetWindowText("");
 
  //等待两个事件都被回置
   WaitForMultipleObjects(2, global_Events, true, INFINITE);
   for(int i = 0;i<256;i++)
   {
   global_Array[i]=H;
   ptr->SetWindowText(global_Array);
   Sleep(10);
   }
   return 0;
  }
  void CEventDlg::OnBnClickedButtonStart()
  {
   for (int i = 0; i < 2; i++)
   {
 
  //实例化事件
   global_Events[i]=CreateEvent(NULL,false,false,NULL);
   }
   CWinThread *ptrOne = AfxBeginThread(Global_ThreadOne,
   &m_One,
   THREAD_PRIORITY_NORMAL,
   0,
   CREATE_SUSPENDED);
   ptrOne->ResumeThread();
   
   //Start the second Thread
   CWinThread *ptrTwo = AfxBeginThread(Global_ThreadTwo,
   &m_Two,
   THREAD_PRIORITY_NORMAL,
   0,
   CREATE_SUSPENDED);
   ptrTwo->ResumeThread();
   
   //Start the Third Thread
   CWinThread *ptrThree = AfxBeginThread(Global_ThreadThree,
   &m_Three,
   THREAD_PRIORITY_NORMAL,
   0,
   CREATE_SUSPENDED);
   ptrThree->ResumeThread();

出处:本站原创 作者:佚名
 阅读排行
01.精美qq空间横幅代码
02.最酷qq个性女生网名
03.最新又有免费QQ秀啦《..
04.巧用透明FlaSh扮靓你的..
05.花之神匠代码(最新代码..
06.最新QQ空间免费导航
07.最新免费个人形象设置..
08.最新qq空间flash代码m..
09.CSS技术结合图像实现动..
10.Photoshop光影魔术师:..
11.QQ音速种子狂刷
12.最新QQ空间透明代码
13.PS实例教程:教你制作结..
14.Photoshop光影魔术师:..
15.制作背景图__教程
16.用Photoshop制作漂亮的..
17.如何获得QQ音速种子
18.≤QQ空间代码≥在日志..
19.网页浮动广告的制作代..
20.用Photoshop制作大红灯..
21.常用CSS
22.Photoshop给靓丽美女打..
 推荐文章
·Photoshop 表现技法之..
·快速将你的相片矢量化..
·PHOTOSHOP制作炽热的太..
·用Photoshop制作美丽的..
·流行杀手的娃娃工厂__..
·打造8号台球__教程
·PHOTOSHOP制作待机MM图..
·用Photoshop帮MM做纹身..
·PHOTOSHOP美眉着色绝招..
·PHOTOSHOP花露的制作_..
·PHOTOSHOP渐变工具的巧..
·PHOTOSHOP手绘奥兰多-..
·高难度抠图两种方法__..
·Photoshop高尔夫球的制..
·Photoshop打造精美玉佩..
Eqxia_COM下载站 版权所有 Copyright© 2001-2005 Www.eqxia.COM, All Rights Reserved.