打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Semphores基本用法示例
#include <windows.h>
#include <iostream>

using namespace std;

#define  Max_Sem_Count 10
#define  ThreadCount 12

HANDLE ghSemphores;

DWORD WINAPI ThreadFunc(LPVOID);

int main()
{
HANDLE Thread[ThreadCount];
DWORD ThreadID;

ghSemphores=CreateSemaphore(NULL,Max_Sem_Count,Max_Sem_Count,NULL);

if (ghSemphores==NULL)
{
cout<<"Create Semaphore Error"<<endl;
return 1;
}

for (int i=0;i<ThreadCount;i++)
{
Thread[i]=CreateThread(NULL,0,ThreadFunc,NULL,0,&ThreadID);
if (Thread[i]==NULL)
{
cout<<"Create Thread Failed"<<endl;
return 1;
}
}

WaitForMultipleObjects(ThreadCount,Thread,TRUE,INFINITE);

for (i=0;i<ThreadCount;i++)
{
CloseHandle(Thread[i]);
}
return 0;
}

DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
UNREFERENCED_PARAMETER(lpParam);
DWORD dwWaitResult;
BOOL bContinue=TRUE;

while(bContinue)
{
dwWaitResult=WaitForSingleObject(ghSemphores,0L);

switch(dwWaitResult)
{
case WAIT_OBJECT_0:
{
cout<<"Thread"<<GetCurrentThreadId()<<"has Waited Successful"<<endl;
   bContinue=FALSE;
::Sleep(5);
if (!ReleaseSemaphore(ghSemphores,1,NULL))
{
cout<<"Release Semaphore Failed!"<<endl;
}
}
break;
case WAIT_TIMEOUT:
cout<<"Thread"<<GetCurrentThreadId()<<"has Waited Failed"<<endl;
break;
}
}
return 0;
}
 
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux下pthread的读写锁的优先级问题
Windows下C++多线程同步与互斥简单运用
C++线程池QueueUserWorkItem
用Windows API函数(CreateFile/ReadFile/WriteFile/CloseHandle)完成文件拷贝程序(初级版)
VC下线程同步的三种方法
C++ 操作注册表-一亩菜园-搜狐博客
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服