📄 multithread.h
字号:
#ifndef _MULTITHREAD_H
#define _MULTITHREAD_H
#include "jwfcx.h"
/*关于CWinTrheadEx的用法:
1、生成子类,重载Process()以处理具体的内容
2、初始化线程:
m_pMThr = (CXXXThr*)AfxBeginThread( RUNTIME_CLASS(CXXXThr), THREAD_PRIORITY_ABOVE_NORMAL );
如果m_pMThr非空,则初始化成功,此后可用此指针来操作本线程
3、设置接收通知的窗口
m_pMThr->SetNotifyWnd( hWnd );
注意一定要设置后StartProcess才能工作
4、调用StartProcess()来启动处理过程,此函数以消息方式来启动Process(),
这样Process()就进入了本线程的独立空间中
5、不需要此线程时,要调用Quit()来退出线程,注意缺省时线程实例将
自动删除,并不需要做 delete m_pMThr;
*/
/////////////////////////////////////////////////////////////////
// CThreadInfo
// 1999-05-01 ChK
// CMultiThreadBase的工作方式已不再新代码中使用,保留之仅为兼容老的代码
// 新的多线程方式:以CWinThread为核心,用发送线程消息的方式来操作之
// 本类提供一些辅助功能,如进度指示等
class JWX_EXT_CLASS CThreadInfo
{
public:
CThreadInfo();
~CThreadInfo();
//通知主控线程退出
void ThreadExit( );
//通知主控线程完成工作
void ThreadDone( );
//在开始一个线程工作时由主控调用,此函数设置运行标志及复位中止标志
void ThreadStart();
//用于进度指示,由具体的循环代码调用,下传的两个参数为发向指定
//窗口的两个消息参数,具体解释由调用者来完成
//典型用法: p1 进度百分数,p2完成百分数
virtual void Progress( WORD p1, DWORD p2 );
void SetNotifyWnd( HWND hwnd )
{
m_hwndNotify = hwnd;
};
//此函数已不用
/*
void SetRuning( BOOL runing )
{
m_isRuning = runing;
};
*/
BOOL IsRuning()
{
return m_isRuning;
};
void SetAborting( BOOL aborting)
{
m_isAborting = aborting;
};
BOOL IsAborting()
{
return m_isAborting;
};
protected:
HWND m_hwndNotify; //窗口句柄,用于接收进程通知消息
WORD m_oldP1;
DWORD m_oldP2;
BOOL m_isRuning;
CEvent * m_pEVIsIdle; //标识是否空闲
BOOL m_isAborting;
};
/////////////////////////////////////////////////////////////////////////////
// CWinThreadEx thread
class JWX_EXT_CLASS CWinThreadEx : public CWinThread, public CThreadInfo
{
DECLARE_DYNCREATE(CWinThreadEx)
protected:
CWinThreadEx(); // protected constructor used by dynamic creation
public:
//通知副线程开始处理过程,此函数通过消息来启动Process()
BOOL StartProcess();
//终止处理过程,等到过程结束(Process()返回)时才返回
virtual BOOL StopProcess();
//退出线程并删除this,直到线程安全退出,此函数才返回
void Quit();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CWinThreadEx)
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
//}}AFX_VIRTUAL
// Implementation
protected:
virtual ~CWinThreadEx();
//子类重载此成员,在其中进行任务处理,必要时检查IsAborting()标志
virtual void Process();
//测试是否可启动处理过程,子类可以重载之以便在必要时禁止启动过程(注意在子类中要调用父类成员)
virtual BOOL CanStartProcess();
// Generated message map functions
//{{AFX_MSG(CWinThreadEx)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
afx_msg void OnStartProcess( UINT wParam, LONG lParam );
DECLARE_MESSAGE_MAP()
};
#endif //
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -