⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmutex.h

📁 液晶电视完整代码可实现人机界面
💻 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 + -