//注意事项:另一进程意外终止,semaphore 不会接收。所以如果在进程通信最好用 互斥量 mutex.
代码二:
//这个缺陷同 event 事件机制一样。所以进程通信最好使用 互斥量 mutex。
代码如下:
代码一:
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
char name[100] = "shanghai";
void main()
{
//创建信号量,初始化可用的信号量为 0 ,最大可用为 1
HANDLE sem = CreateSemaphoreA(NULL, 0, 1, name);
if (sem == NULL)
{
printf("创建失败!\n");
return;
}
printf("创建成功!\n");
getch();
ReleaseSemaphore(sem, 1, name); //设置信号量的值为 1
CloseHandle(sem); //关闭资源
system("pause");
}
代码二:
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
//注意事项:另一进程意外终止,semaphore 不会接收。所以如果在进程通信最好用 互斥量 mutex.
//这个缺陷同 event 事件机制一样。所以进程通信最好使用 互斥量 mutex。
char name[100] = "shanghai";
void main()
{
//创建信号量,初始化可用的信号量为 0 ,最大可用为 1
HANDLE sem = OpenSemaphoreA(SEMAPHORE_ALL_ACCESS, TRUE, name);
if (sem == NULL)
{
printf("打开失败!\n");
// return;
}
else
{
printf("等待接收...\n");
DWORD res = WaitForSingleObject(sem, 10000); //等待接收rem 信号量,等待时间为 1秒钟时间
switch(res)
{
case WAIT_OBJECT_0:
printf("接收成功!");
break;
case WAIT_TIMEOUT:
printf("接收超时\n");
break;
case WAIT_ABANDONED:
printf("另一个程序意外终止\n");
break;
default:
break;
}
}
CloseHandle(sem); //关闭资源
system("pause");
}