EnableWindow(true);//启动按钮生效GetDlgItem(IDC_STOPR)->EnableWindow(false);//停止按钮无效-IMDN开发者社群-imdn.cn"> EnableWindow(true);//启动按钮生效GetDlgItem(IDC_STOPR)->EnableWindow(false);//停止按钮无效 - IMDN开发者社群-imdn.cn">
登录
首页 » VC++源码 » VC++ 使用互斥对象(Mutex)实现线程同步

VC++ 使用互斥对象(Mutex)实现线程同步

于 2022-04-11 发布 文件大小:21.01 kB
0 246
下载积分: 2 下载次数: 1

代码说明:

VC++ 使用互斥对象(Mutex)实现线程同步,使用临界区对象实现读、写线程的同步,通过一个写线程和读线程的实例,来演示Mutex实现的线程同步功能。用完后销毁读线程,如下示:   CSingleLock singleLock(&mutex);   singleLock.Lock();   TerminateThread(g_ReadHnd, 0);//终止读线程   singleLock.Unlock();//释放资源   m_ReadEdit.SetWindowText("终止读线程");   GetDlgItem(IDC_STARR)->EnableWindow(true);//启动按钮生效   GetDlgItem(IDC_STOPR)->EnableWindow(false);//停止按钮无效

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • VC++ 6.0 定制分割条(分隔条)的样式及大小
    VC++ 6.0 定制分割条,也就是窗体的分隔条,将窗口分隔成若干个部分,用来显示不同的内容,该窗格视图为CStaticSplitWnd4View,该窗格大小不能通过拖动改变,不过我们可以通过菜单命令动态改变大小,窗格视图为CView2,该窗格大小不能通过拖动改变,窗格视图CView3和CView4都可以通过分隔条的拖动来改变视图大校   本示例中的分隔条经过了初级的美化,而且也向用户展示了,如何通过分割条来固定分栏窗格视图的大小,如何让分隔条不支持拖动等功能。
    2023-08-22 18:20:04下载
    积分:1
  • VC++ 读取SQL Server数据库结构
    VC++ 读取SQL Server数据库结构,读取指定数据库指定数据表的数据结构,演示中仅是读取出字段名、字段类型和字段类型取值大小,只是演示一种获取字段数据的方法:   m_grid.SetExtendedStyle(LVS_EX_FLATSB    |LVS_EX_FULLROWSELECT    |LVS_EX_HEADERDRAGDROP    |LVS_EX_ONECLICKACTIVATE    |LVS_EX_GRIDLINES);   m_grid.InsertColumn(0,"字段名",LVCFMT_LEFT,100,0);   m_grid.InsertColumn(1,"类型",LVCFMT_LEFT,100,1);   m_grid.InsertColumn(2,"大小",LVCFMT_LEFT,100,2);
    2022-07-17 13:15:00下载
    积分:1
  • VC6.0 对联合查询后的数据结果集进行排序
    VC6.0 对联合查询后的结果进行排序,对获得的记录集进行排序,这是个同样实用的功能,特别在一些中小企业的数据库系统中,尤其实用,对数据分析很有帮助。本例子中的排序主要是两种常用形式:升序排列和降序排列。最终的排序结果绑定于Datagridview数据显示控件中显示。
    2022-07-13 07:35:09下载
    积分:1
  • VC++ 使用互斥对象(Mutex)实现线程同步
    VC++ 使用互斥对象(Mutex)实现线程同步,使用临界区对象实现读、写线程的同步,通过一个写线程和读线程的实例,来演示Mutex实现的线程同步功能。用完后销毁读线程,如下示:   CSingleLock singleLock(&mutex);   singleLock.Lock();   TerminateThread(g_ReadHnd, 0);//终止读线程   singleLock.Unlock();//释放资源   m_ReadEdit.SetWindowText("终止读线程");   GetDlgItem(IDC_STARR)->EnableWindow(true);//启动按钮生效   GetDlgItem(IDC_STOPR)->EnableWindow(false);//停止按钮无效
    2022-04-11 14:27:41下载
    积分:1
  • VC++ 6.0 演示如何获取打印份数
    VC++ 6.0 演示如何获取打印份数,这个功能在平时的打印操作中,几乎每次都要设置一下,要不然打印机按打印一份处理,本程序可设置打印份数,将参数传递给打印机,一次可打印多份文档,代码超简单,有兴趣下载源码学习。
    2022-03-24 22:43:51下载
    积分:1
  • VC++ 在Combobox组合框的下拉列表框中实现自动选择
    VC++ 在组合框的下拉列表框中实现自动选择,当在Combobox组合框中键入字符时,组合框会根据用户的输入在列表框中自动选择匹配的项,其实就是大家熟悉的搜索提示,用户输入时,Combobox下拉框会智能匹配用户的输入内容,显得很智能的下拉框。
    2022-08-06 12:06:50下载
    积分:1
  • VC++ 创建DIB操作类——CDib的程序代
    VC++ 创建DIB操作类——CDib的源程序代码,这个类中创建了几个函数:1、用来绘制DIB对象的函数,2、按照DIB创建一个逻辑调色板的函数,3、计算DIB像素的起始位置,并返回指针的函数,4、返回DIB中图象的高度的函数,5、返回DIB中调色板的大小的函数,6、返回DIB中调色板颜色种数的函数等。   用于操作DIB的函数声明如下:   BOOL DrawDib(HDC, LPRECT,HGLOBAL, LPRECT,CPalette*);//显示位图   BOOL ConstructPalette(HGLOBAL,CPalette* );//构造逻辑调色板   LPSTR GetBits(LPSTR); //取得位图数据的入口地址   DWORD GetWidth(LPSTR);//取得位图的宽度   DWORD GetHeight(LPSTR);//取得位图的高度   WORD GetPalSize(LPSTR); //取得调色板的大小   WORD GetColorNum(LPSTR);//取得位图包含的颜色数目   WORD GetBitCount(LPSTR);//取得位图的颜色深度   HGLOBAL CopyObject(HGLOBAL);//用于复制位图对象   BOOL SaveFile(HGLOBAL , CFile&);//存储位图为文件   HGLOBAL LoadFile(CFile&);//从文件中加载位图   // 在对图象进行处理时,针对位图的字节宽度必须是4的倍数的这一要求,我们设计了函数GetRequireWidth,来处理这种比较特殊的情况:   int GetReqByteWidth(int ); //转换后的字节数GetRequireByteWidth   long GetRectWidth(LPCRECT );//取得区域的宽度   long GetRectHeight(LPCRECT);//取得区域的高度
    2022-03-09 13:34:37下载
    积分:1
  • VC 扫描仪控制程序
    这是一个在VC++环境下实现的扫描仪扫描管理程序,用于启动扫描和停止扫描,只是实现基本的扫描仪控制,不过本程序的顺利运行需要扫描仪支持,且是指定型号,窗口中对应的功能,由下面的按钮事件来响应:   开始扫描:   void CScanManageDlg::OnButton1()   {    m_Scan.ScannerAvailable();    m_Scan.OpenScanner();    m_Scan.StartScan();   }   停止扫描:   void CScanManageDlg::OnButton2()   {    m_Scan.StopScan();   }
    2022-05-27 18:23:01下载
    积分:1
  • VC6.0 使用ODBC读写Excel表格文件
    本VC++源码主要演示使用ODBC数据库访问技术:通过ODBC读写Excel表格文件,若数据库表没有被创建,则将"读取"按钮和"列表"控件置为无效状态,获取主程序所在路径,获取数据库文件。
    2022-08-21 14:44:43下载
    积分:1
  • VC串口调试、发送和接收消息范例
    VC串口调试、发送和接收消息数据范例,这里面涉及到线程控制、串口调试、发送消息、接收消息等编写技巧,还有串口读和写操作,独占方式、延时发送消息,设置发送和接收缓冲区大小等,关于一些参数定义和接收数据函数的代码如下:   OVERLAPPED tOverLaped= {0}; //线程函数使用的OVERLAPPED结构   OVERLAPPED wOverLaped = {0}; //写操作使用的OVERLAPPED结构   OVERLAPPED rOverLaped = {0}; //读操作使用的OVERLAPPED结构   BOOL IsFun = TRUE; //线程是否运行   BOOL IsStop = FALSE; //数据是否发送完毕   //自定义消息处理函数,用于接收数据   void CSeriesPortDlg::OnRecieveData(WPARAM wParam, LPARAM lParam)   {    DWORD res,factbyte;    memset(DataBuffer,0,1024); //初始化数据缓冲区    COMSTAT rst;    ClearCommError(hCom,&res,&rst);//清空串口错误标志,记录当前通信状态    rOverLaped.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL); //创建一个事件对象    if (ReadFile(hCom,DataBuffer,rst.cbInQue,&factbyte,&rOverLaped)) //读取数据到缓冲区中    {    DataBuffer[rst.cbInQue]= 0;    IsStop = FALSE;    }    else    {    res = WaitForSingleObject(rOverLaped.hEvent,5000);    }    IsStop = FALSE;    MessageBox(DataBuffer);   }
    2023-05-17 19:05:03下载
    积分:1
  • 696516资源总数
  • 106914会员总数
  • 0今日下载