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

📄 thread.h

📁 一个更为先进的嵌入式操作系统.采用RMS线程调度算法,具有信号量等同步对象.亦包括GUI. 通过该系统您可以极大知道Windows的内部秘密.
💻 H
字号:
#ifndef _GOS_THREAD_H_
#define _GOS_THREAD_H_

#define Sleep(ms) g_pKernel->m_pCurThread->SleepEx(ms,FALSE);

enum _tagThread
{
	CreateSuspend =0x00004,
	ThreadDefaultStackSize=256*1024-4,

	msgCreateThread=MAKEMSG(PriorityNormal,MsgClassThread,1L),
	msgExitThread,
	msgRunThread,
	
	MsgQueueGrowSize=102,
};

typedef struct _tagMSGLE
{
	_tagMSGLE* pNext;
	MSG msg;
}MSGLE,*PMSGLE;

class CThread : public CMsgObject
{
	friend class CKernel;
	friend class CHAL;
	friend class CSyncObject;
	friend class CCriticalSection;
	friend class CMutex;
	friend class CSemaphore;
	friend class CEvent;
public:
	virtual LRESULT MsgProc(UINT message, WPARAM wParam, LPARAM lParam); //消息处理函数
	int OnRun(PVOID pData);
public:
	int Run(PVOID pData)
		{ return MsgProc(msgRunThread,WPARAM(pData),0); }
	BOOL CreateThread(PVOID pParam,int nPriority,UINT nStackSize,int nFlags);
	BOOL ExitThread(DWORD dwExitCode);
	VOID SleepEx(LONG nMilliseconds,BOOL bSleepTo);
	BOOL SetThreadPriority(int nPriority);
	int GetThreadPriority(){ return m_nPriority; }
	int GetLastError(){ return m_nErrCode; }
	void SetLastError(int nErrCode){ m_nErrCode=nErrCode; }
	HANDLE InsertMessage(CMsgObject* pObj,UINT nMessage,WPARAM wParam,LPARAM lParam);
	HANDLE InsertMessage(CMsgObject* pObj,HANDLE hRefMsg,WPARAM wParam,LPARAM lParam);
	void PulseMessage(HANDLE hMsg);
	BOOL RemoveMessage(CMsgObject* pObj);
	BOOL RemoveMessage(CMsgObject* pObj,UINT nMessage);
	BOOL RemoveMessage(HANDLE hMsgFrom,HANDLE hMsgTo);
	BOOL RemoveTimerMessage(CMsgObject* pObj,UINT nIDEvent);
	void RemoveAllMessage();
	BOOL GetMessage(PMSG pMsg,LONG nTimeOut);
	LRESULT DispatchMessage(const MSG *pMsg);
	CThread();
private:
	BOOL GrowMQBuffer();
private:
	CThread* m_pNext; //同级线程
	CSyncObject* m_pWaitObject;//等待对象
	PVOID m_pStack;//CPU栈指针
	CHeap m_heap; //线程堆
	DWORD m_nWakeTime; //唤醒时间
	USHORT m_nPriority;//优先级
	USHORT m_nErrCode; //错误代码
	CCriticalSection m_tlock;
	PMSGLE m_pMQEntry;
	PMSGLE m_pMQFree;
	PMSGLE m_pMQBuffer;
};

typedef CThread *PTHREAD;

#endif //_GOS_THREAD_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -