用MFC编写多线程程序常用函数

本文详细介绍了在MFC中编写多线程程序常用的函数,包括信号量创建、使用、释放,线程创建、挂起、唤醒和终止等。通过示例代码展示了如何使用CreateSemaphore()创建信号量,WaitForSingleObject()和ReleaseSemaphore()管理信号量,以及CreateThread()、_beginthreadex()、AfxBeginThreadex()创建线程。同时,讨论了线程控制的注意事项,如避免使用TerminateThread(),而是采用更安全的方式控制线程结束。
摘要由CSDN通过智能技术生成

1.信号量创建函数CreateSemaphore(NULL,initialValue,maxValue,NULL)

该函数的返回值为指向信号量的句柄,之后通过该句柄来使用信号量;

该函数第一个参数为安全属性,一般情况下默认为NULL;

第二个参数为信号量的初始值;

第三个参数为信号量的最大值;

第四个参数为信号量名称,我是通过句柄来使用信号量的,因此名称都写成NULL;

为了简单起见,我没有用CreateMutex()函数来创建互斥锁,而是创建了初始值为1最大值也为1的信号量来替代,代码如下:HANDLE bMutex = CreateSemaphore(NULL,1,1,NULL);//创建对箱子互斥访问的锁;

普通信号量创建代码:

HANDLE bEmpty = CreateSemaphore(NULL,box1Size,box1Size,NULL);//创建空缓冲区的信号量句柄

HANDLE bFull = CreateSemaphore(NULL,0,box1Size,NULL);//创建满缓冲区的信号量的句柄

2.信号量使用函数DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);

第一个参数为要使用的信号量的句柄,句柄由信号量创建函数得到; 

第二个参数为判断信号量是否可使用的等待时间,单位为毫秒;

如果在等待时间内信号量变得可以使用,返回WAIT_OBJECT_0,如果等待时间到达上限信号量还是无法使用,则函数返回WAIT_TIMEOUT,可以根据两种情况下的不同的函数返回值来判断信号量是否可使用; 

参数dwMilliseconds有两个具有特殊意义的值:0和INFINITE。若为0,则该函数立即返回;若为INFINITE,则线程一直被挂起,直到hHandle所指向的对象变为有信号状态时为止;

但是在课设过程中老师说尽量不要使用INFINITE,而是使用一个确定的值来代替(如1000),再通过一个死循环来不停监测,这样做是因为会不停地监测信号量是否可用,如果此时结束正在执行这段代码的进程程序会报错&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值