📄 thread.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 + -