QQ登录

只需一步,快速开始

232上位机VC MFC解析打开指定快捷图标

[ 复制链接 ]

232上位机VC MFC使用互斥对象使多线程同步

232上位机VC MFC使用互斥对象使多线程同步
232上位机VC MFC解析打开指定快捷图标
功能展示
多个线程按指定顺序运行,是基本的一个功能,不然程序运行中会出现意想不到的问题,当前例程利用互斥对象,实现多个线程间的同步,让多个线程有序的向编辑框写入字符,效果如图,点击按钮,五个线程按先后顺序依次向编辑框写入工控编程吧
要点提示
互斥类CMutex的实例对象,只允许一个线程占有某个共享资源,以保护独占式共享资源。因此,互斥体的使用方法与临界段的使用方法极为相似,所不同的是临界段只能在同一个进程中对线程进行同步,而互斥体可以用在不同的进程中进行线程同步控制。
CMutex类的构造函数原型为:
CMutex(
    BOOL bInitiallyOwn /* = FALSE */,    //用来指定互斥体对象初始状态是锁定(TRUE)还是非锁定(FALSE)
    LPCTSTR lpszName /* = NULL */,        //用来指定互斥体的名称
    LPSECURITY_ATTRIBUTES lpsaAttribute /* = NULL */        //为一个指向SECURITY_ATTRIBUTES结构的指针
)
该对象的使用方法与临界段对象的使用方法相似,在线程中获得互斥体对象可以调用成员函数Lock(),需要交出互斥体对象时,调用成员函数UnLock()。
实现功能
1.新建基于对话框的应用程序
2.拖拽一编程框ID为IDC_EDIT1修改属性多行,接收回车;拖拽按钮<使用互斥对象 使线程同步 向编辑框写入字符>关联函数
  1. void CGkbc8Dlg::OnButton1()
  2. {        
  3.         CEdit*pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);
  4.         pEdit->SetWindowText("使用互斥对象实现多线程同步:\r\n\r\n");

  5.         AfxBeginThread(ThreadFun1,pEdit);
  6.         AfxBeginThread(ThreadFun2,pEdit);
  7.         AfxBeginThread(ThreadFun3,pEdit);
  8.         AfxBeginThread(ThreadFun4,pEdit);
  9.         AfxBeginThread(ThreadFun5,pEdit);
  10. }
复制代码
3.再在此函数前面添加互斥对象及互斥类的头文件,一个线程函数,这时示例两个线程函数
  1. #include <afxmt.h>//CMutex头文件
  2. CMutex g_Mutex(FALSE,NULL);
  3. static UINT ThreadFun1(LPVOID pParam)
  4. {
  5.         g_Mutex.Lock();

  6.         CEdit*pEdit=(CEdit*)pParam;
  7.         CString sText;
  8.         for(int i=0;i<25;i++)
  9.         {
  10.                 pEdit->GetWindowText(sText);
  11.                 sText+="工";
  12.                 pEdit->SetWindowText(sText);
  13.                
复制代码
  1. Sleep(50);
  2.         }
  3.         pEdit->GetWindowText(sText);
  4.         sText+="\r\n";
  5.         pEdit->SetWindowText(sText);

  6.         g_Mutex.Unlock();
  7.         return 0;
  8. }
  9. static UINT ThreadFun2(LPVOID pParam)
  10. {
  11.         g_Mutex.Lock();

  12.         CEdit*pEdit=(CEdit*)pParam;
  13.         CString sText;
  14.         for(int i=0;i<25;i++)
  15.         {
  16.                 pEdit->GetWindowText(sText);
  17.                 sText+="控";
  18.                 pEdit->SetWindowText(sText);
  19.                 Sleep(50);
  20.         }
  21.         pEdit->GetWindowText(sText);
  22.         sText+="\r\n";
  23.         pEdit->SetWindowText(sText);

  24.         g_Mutex.Unlock();
  25.         return 0;
  26. }
复制代码
我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:232.上位机VC MFC解析打开指定快捷图标.zip 
文件大小:137.82 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索