cmutex.h

来自「液晶电视完整代码可实现人机界面」· C头文件 代码 · 共 89 行

H
89
字号
#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 + =
减小字号Ctrl + -
显示快捷键?