SetWindowText(str);//编辑框显示CSingleLocksinglelock(&mySemaphore);//创建CSingleLock类对象singlelock.Lock();//计数器初始值减1MessageBox(NULL,"信号量控制访问资源线程数","提示",MB_ICONWARNING);//弹出对话框thread--;//线程数目减1str.Format("%d",thread);pedit->SetWindowText(str);//编辑框显示return0;}-IMDN开发者社群-imdn.cn"> SetWindowText(str);//编辑框显示CSingleLocksinglelock(&mySemaphore);//创建CSingleLock类对象singlelock.Lock();//计数器初始值减1MessageBox(NULL,"信号量控制访问资源线程数","提示",MB_ICONWARNING);//弹出对话框thread--;//线程数目减1str.Format("%d",thread);pedit->SetWindowText(str);//编辑框显示return0;} - IMDN开发者社群-imdn.cn">
登录
首页 » VC++源码 » VC6.0 使用信号量Semaphore实现线程的同步

VC6.0 使用信号量Semaphore实现线程的同步

于 2022-02-20 发布 文件大小:13.88 kB
0 88
下载积分: 2 下载次数: 1

代码说明:

VC6.0 使用信号量Semaphore实现线程的同步,使用信号量实现线程同步,设置访问保护对象的最多线程数为2,确定当前已经启动运行的线程数目,可以创建线程。   CWinThread* pThread=AfxBeginThread(ThreadProc,&m_Edit);//开辟一个工作线程,   int thread=0;//全局变量记录当前运行线程的数目   CSemaphore mySemaphore(2,2);//创建CSemaphore类对象   UINT ThreadProc(LPVOID pParam)//工作线程入口函数   {    CEdit *pedit=(CEdit*)pParam;    CString str;    thread++;//线程数目加1    str.Format("%d",thread);    pedit->SetWindowText(str);//编辑框显示    CSingleLock singlelock(&mySemaphore);//创建CSingleLock类对象    singlelock.Lock();//计数器初始值减1    MessageBox(NULL,"信号量控制访问资源线程数","提示",MB_ICONWARNING);//弹出对话框    thread--;//线程数目减1    str.Format("%d",thread);    pedit->SetWindowText(str);//编辑框显示    return 0;   }

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

发表评论

0 个回复

  • VC++ 6.0 测试监听用户的鼠标事件
    VC++ 鼠标事件测试,本程序的功能:测试用户的鼠标事件,在客户区显示信息,获得当前客户区的矩形区域,程序可判断当前按下的是鼠标左键或右键,或是鼠标移动了,是否操作了鼠标滚轮,以及当前是否松开了鼠标右键或左键等事件。
    2023-08-14 22:50:02下载
    积分:1
  • VC++ CFileException异常处理用法范例
    VC++ CFileException异常处理用法范例,   catch(CFileException* e)   {    switch(e->m_cause)    {    case CFileException::fileNotFound:    {    strMessage.Format("打开文件时发生异常(try/catch):    在指定位置没有找到文件%s ",strFile);    AfxMessageBox(strMessage);    TRACE("即将删除捕获到的异常对象CFileException::fileNotFound ");    AfxMessageBox("即将删除捕获到的异常对象CFileException::fileNotFound");    //删除异常对象    e->Delete();    TRACE("成功删除捕获到的异常对象CFileException::fileNotFound ");    AfxMessageBox("成功删除捕获到的异常对象CFileException::fileNotFound");    break;    }    case CFileException::invalidFile:    {    strMessage.Format("打开文件时发生异常(try/catch):    文件%无效 ",strFile);    AfxMessageBox(strMessage);    TRACE("即将删除捕获到的异常对象CFileException::invalidFile ");    AfxMessageBox("即将删除捕获到的异常对象CFileException::invalidFile");    //删除异常对象    e->Delete();    TRACE("成功删除捕获到的异常对象CFileException::invalidFile ");    AfxMessageBox("成功删除捕获到的异常对象CFileException::invalidFile");    break;    }    default:    break;    }   }
    2022-01-26 02:02:12下载
    积分:1
  • VC Calendar 自定义的日历选择插件
    VC++ 6.0 Calendar 自定义的日历选择插件,这个功能相信大家都比较熟悉了,是用来选择日期和时间的,避免用户输入出错,选择后可把数据填充在指定的文本框内,或提交至下一个数据处理环节。这个例子是前两年的,风格和Windows XP相似,与Windows7和10版本有所区别,核心代码为:   //设置选择日期   void CCalendarDlg::OnSetCursel()   {    //更新变量    UpdateData(TRUE);    //构造日期变量    CTime tm(m_nYear,m_nMonth,m_nDay,0,0,0);    m_MonthCalCtrl.SetCurSel(tm);   }   //设置日期   void CCalendarDlg::OnSetToday()   {    //更新变量    UpdateData(TRUE);    //构造日期变量    CTime tm(m_nYear,m_nMonth,m_nDay,0,0,0);    m_MonthCalCtrl.SetToday(&tm);    m_MonthCalCtrl.SetCurSel(tm);   }   
    2022-01-25 19:36:09下载
    积分:1
  • VC++ 使用WinInet通过HTTP协议读取网上文件
    VC++ 6.0 使用WinInet通过HTTP协议读取网上文件   在一个按钮事件中定义了网络连接Session:   CInternetSession httpsession;//定义网络连接Session   CString Line;   CInternetFile* webfile=NULL;//定义一个文件对象指针   UpdateData();   if(m_Url.Left(7)!="http://")//如果地址不含HTTP类型标志则添加本地文件类型标志   读出文件前一部分,如果文件多于80行,三示例中只显示前80行.然后更新显示文件:   UpdateData(FALSE);//更新显示文件   delete webfile;//删除文件   GetDlgItem (IDC_SHOW)->EnableWindow (FALSE);//禁用显示按钮   httpsession.Close();//关闭连接
    2023-09-07 18:35:03下载
    积分:1
  • VC6.0 使用信号量Semaphore实现线程的同步
    VC6.0 使用信号量Semaphore实现线程的同步,使用信号量实现线程同步,设置访问保护对象的最多线程数为2,确定当前已经启动运行的线程数目,可以创建线程。   CWinThread* pThread=AfxBeginThread(ThreadProc,&m_Edit);//开辟一个工作线程,   int thread=0;//全局变量记录当前运行线程的数目   CSemaphore mySemaphore(2,2);//创建CSemaphore类对象   UINT ThreadProc(LPVOID pParam)//工作线程入口函数   {    CEdit *pedit=(CEdit*)pParam;    CString str;    thread++;//线程数目加1    str.Format("%d",thread);    pedit->SetWindowText(str);//编辑框显示    CSingleLock singlelock(&mySemaphore);//创建CSingleLock类对象    singlelock.Lock();//计数器初始值减1    MessageBox(NULL,"信号量控制访问资源线程数","提示",MB_ICONWARNING);//弹出对话框    thread--;//线程数目减1    str.Format("%d",thread);    pedit->SetWindowText(str);//编辑框显示    return 0;   }
    2022-02-20 19:37:49下载
    积分:1
  • VC++6.0释放EXE资文件
    VC++6.0释放EXE资源文件,要释放的程序是一个简单的MessageBox,基于MFC对话框程序,先插入已经存EXE(或DLL)文件到VC资源文件中。   /* 函数说明:释放资源中某类型的文件   /* 参 数:新文件名、资源ID、资源类型   /* 返 回 值:成功返回TRUE,否则返回FALSE   BOOL CTestDlg::ReleaseRes(CString strFileName,WORD wResID,CString strFileType)   {    // 资源大小    DWORD dwWrite=0;    // 创建文件    HANDLE hFile = CreateFile(strFileName, GENERIC_WRITE,FILE_SHARE_WRITE,NULL,    CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);    if ( hFile == INVALID_HANDLE_VALUE )    {    return FALSE;    }    // 查找资源文件中、加载资源到内存、得到资源大小    HRSRC hrsc = FindResource(NULL, MAKEINTRESOURCE(wResID), strFileType);    HGLOBAL hG = LoadResource(NULL, hrsc);    DWORD dwSize = SizeofResource( NULL, hrsc);    // 写入文件    WriteFile(hFile,hG,dwSize,&dwWrite,NULL);    CloseHandle( hFile );    return TRUE;   }
    2022-12-26 04:00:03下载
    积分:1
  • vc 串口接收和发送数据的例子 Cs结构
    这是一个CS结构(包括了服务端和客户端)的串口调试程序,测试时,两者都要运行,本程序可让你熟悉串口的相关操作,在客户端和服务端,您都要定义以下几个参数:   m_Comm.SetCommPort(1); //设置串口   m_Comm.SetRThreshold(1); //设置收到多少个字符后触发OnComm事件   m_Comm.SetPortOpen(TRUE); //打开串口   源码中包括了两部分的代码,请下载后编译对应目录中的源码,先运行客户端。
    2022-02-06 06:48:34下载
    积分:1
  • VC++ 定义3种样式的ComboBox下拉列表框
    VC++ 定义3种样式的ComboBox下拉列表框(组合框),主要是简易式、下拉式、下拉列表式。在简易式或下拉式的编辑框中输入文本,然后点击[
    2022-02-02 08:39:36下载
    积分:1
  • VC 钱箱控制程序示例
    VC++6.0 钱箱控制程序示例,程序以一个超市销售终端为例子,演示钱箱控制的基本操作、程序实现等。程序中将使用到m_List、CButton、SetPortOpen、SetCommPort等来实现钱箱控制。在编写类似的销售软件时,这个程序可借鉴。
    2022-06-21 11:22:49下载
    积分:1
  • VC++ 设置位置断点跟踪程序
    VC++ 设置位置断点跟踪程序,利用随机产生的数组来测试断点跟踪的效果,具体的实现代码:   srand( (unsigned)time( NULL ) );//产生随机种子   int array[number];   CString str1,str2;   str1="原始顺序:";   for(int i=0;i  {    array[i]=rand();//设置条件断点    str2.Format("%d ",array[i]);    str1+=str2;   }   pDC->TextOut(20,10,str1);//输出原始数组顺序   BubbleSort(array, 1, number);   str1="排序顺序:";   for( i=0;i  {    str2.Format("%d ",array[i]);    str1+=str2;   }   pDC->TextOut(20,30,str1);//输出排序后的数组顺序
    2022-03-21 21:04:24下载
    积分:1
  • 696518资源总数
  • 104292会员总数
  • 28今日下载