one.cpp
#include <windows.h>
#include <stdio.h>
#define PROG_NAME "李白"
HANDLE lb_to_cp, cp_to_lb; //声明信号量
void P(HANDLE s) //P操作
{
WaitForSingleObject(s, INFINITE);
}
void V(HANDLE s) //V操作
{
ReleaseSemaphore(s, 1, NULL );
}
int main()
{
int i=0;
HWND hwnd=GetForegroundWindow(); //获取程序窗口句柄
char acts[][9]={"炮二平五","马二进三","车一进一","车一平六","车六进七","车九进一","炮八进五","炮五进四","车九平六","前车进一","车六平四","车四进六","炮八平五"};
HANDLE hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE, 0,0x100,"CHESS_BOARD"); //创建共享内存
LPSTR chess_menu=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0); //进程连接共享内存,得到共享内存首地址
lb_to_cp=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"Global\\lb_to_cp"); //信号量初始化为0
cp_to_lb=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,"Global\\cp_to_lb"); //信号量初始化为0
if(lb_to_cp==NULL){
printf("LB-to-CP信号量错\n");
return -1;
}
if(cp_to_lb==NULL){
printf("CP-to-LB信号量错\n");
CloseHandle(cp_to_lb);
return -1;
}
for(i=0; i<sizeof(acts)/9; i++) {
P(cp_to_lb); //P操作: 等待裁判允许