CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

请教一个关于线程执行的问题,看我理解的对不对?

楼主normalnotebook(逐浪踏雪)2003-08-01 23:39:15 在 VC/MFC / 进程/线程/DLL 提问

有这样一段代码:  
  说明:所有的变量都以申明  
  ........................代表一些代码  
   
   
  BOOL   CAscend_SMSDlg::OnInitDialog()  
  {  
  .......................  
            hMutex   =     CreateMutex(NULL,FALSE,"MutexStop");  
  .......................  
  }  
   
   
  UINT   RcvMsg(LPVOID)  
  {  
          ...............................  
          Sleep(200);  
          while(true)  
          {  
  dwWaitResult   =   WaitForSingleObject(hMutex   ,100);  
  switch(dwWaitResult)  
  {  
          case   WAIT_OBJECT_0:  
        {  
  ReleaseMutex(hMutex);  
  AfxEndThread(1);                   return   0;  
          }  
          case   WAIT_TIMEOUT:  
        {  
                                .......................  
                      if(没有错误)  
                                      {  
                                          A操作;  
  }  
  else    
  {  
                                                ................  
            ReleaseMutex(hMutex);  
            AfxEndThread(1);           return   0;  
  }  
                        }  
      case   WAIT_ABANDONED:  
                Sleep(1);  
                break   ;  
                  }  
          }  
  }  
   
  void   CAscend_SMSDlg::OnBtnOpen()    
  {  
  ........................  
  dwWaitResult   =   WaitForSingleObject(hMutex   ,   INFINITE);  
  AfxBeginThread(RcvMsg,""   );  
  ........................  
  }  
   
  初始化时创建一个信号灯,再OnBtnOpen()中dwWaitResult   =   WaitForSingleObject(hMutex   ,   INFINITE);中使信号灯无效,其他线程无法访问,然后启动线程。  
  再UINT   RcvMsg(LPVOID)中的dwWaitResult   =   WaitForSingleObject(hMutex   ,100);本来信号灯就是无效的,等100ms后,信号灯还是无效,便执行WAIT_TIMEOUT:只要没有错误,便执行A操作。因为是死循环,便在等100ns,还是执行A操作,一直执行下去,也就是说信号灯不可能变为真。(当然我会再关闭窗口前,杀死线程)  
  现在有一疑问:  
  书上说把dwWaitResult   =   WaitForSingleObject();放在共享代码前,于是一个线程便执行,其他的线程便无法执行,当再UINT   RcvMsg(LPVOID)执行一遍后,再次来到  
  dwWaitResult   =   WaitForSingleObject(hMutex   ,100);前,因为下面的代码不是共享代码,而是利用他执行这句话后的结果进行判断,所以还是执行的。  
   
  不知我的理解对不对,请大家说说! 问题点数:50、回复次数:1Top

1 楼afc(afc)回复于 2003-08-02 13:02:14 得分 50

不是,同一时刻只有一个线程能得到Mutex,和是不是共享代码没有关系,可以利用Mutex的这个特性实现多个线程执行共享的代码而不互相冲突Top

相关问题

  • 线程的理解!!
  • 线程的理解!!
  • 线程的理解!
  • 线程执行的问题
  • 线程执行的问题
  • 我对线程同步的理解,大家看对不对?
  • c++线程问题,好像不会执行线程函数
  • 如何知道多线程中各线程执行
  • 线程为何不立刻执行?
  • 怎么放在线程里执行?

关键词

  • 线程
  • 执行
  • 信号灯
  • 代码
  • 共享代码
  • dwwaitresult
  • hmutex
  • waitforsingleobject
  • 无效
  • a操作

得分解答快速导航

  • 帖主:normalnotebook
  • afc

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo