📄 cmutex.h
字号:
#ifndef CMUTEXT_H
#define CMUTEXT_H
///////////////////////////////////////////////////////////////////////////////
//
#include <stdlib.h>
#include <stdio.h>
///////////////////////////////////////////////////////////////////////////////
//
//子进程状态
//csBorn 子进程新生
//csWait 等待获得互斥量
//csService 阻塞等待接收客户端的请求
//csBusy 正在处理客户端的请求
//csIdle 处于发呆状态
//csDead 子进程已退出 死亡
enum EChildState {csBorn = 0, csWait, csService, csBusy, csIdle, csDead};
//子进程信息
struct tagChildInfo
{
pid_t m_chiPid;
EChildState m_chiState;
};
class CMuTex
{
protected:
/////////////////////////////////////////////////////////////////////////////
// 隐藏默值和拷贝构造函数
// CMuTex& operator=(const CMuTex&){};
CMuTex(void){};
CMuTex(const CMuTex&){};
tagChildInfo* m_ChiInfo;
int m_childcount;
int m_lostpid;
//
public:
/////////////////////////////////////////////////////////////////////////////
//构造函数 参数 sum 表示主进程需要创建多少子进程 sum >= 1
CMuTex(int sum)
{
int I;
printf("[CMuText ]子进程个数[%d]\n", sum);
m_childcount = sum;
//创建存储子进程状态的数组 并对其进行初始化
m_ChiInfo = (tagChildInfo *)malloc(sizeof(tagChildInfo) * sum);
for(I = 0; I < sum ; I++)
{
SetChiProInfo(I, -1, csDead);
}
// printf("[CMuText ] 初始化共享文件\n");
// my_lock_init(LOCK_FILE);
}
/////////////////////////////////////////////////////////////////////////////
//析造函数
~CMuTex(){free(m_ChiInfo);};
/////////////////////////////////////////////////////////////////////////////
//等待获得互斥量的控制权
int WaitMutex( char *);
/////////////////////////////////////////////////////////////////////////////
//释放对互斥量的控制权
int ReleaseMutex();
/////////////////////////////////////////////////////////////////////////////
//保存指定索引的子进程信息
void SetChiProInfo(int index, pid_t chipid, EChildState chistate);
/////////////////////////////////////////////////////////////////////////////
//保存指定进程ID的子进程信息
void SetChiProInfoEx(pid_t chipid, EChildState chistate);
/////////////////////////////////////////////////////////////////////////////
//得到子进程的状态
EChildState GetChiProState(int index);
/////////////////////////////////////////////////////////////////////////////
//得到子进程的ID
pid_t GetChiProPid(int index);
/////////////////////////////////////////////////////////////////////////////
//查找指定进程号的进程是否退出
int ChiProIsLive(int pid);
/////////////////////////////////////////////////////////////////////////////
//监控子进程的状态
int WatchChiPro();
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -