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

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),再通过一个死循环来不停监测,这样做是因为会不停地监测信号量是否可用,如果此时结束正在执行这段代码的进程程序会报错&#

你可能感兴趣的:(操作系统,课程设计,MFC,多线程)