简单的工作者线程封装

本文介绍了一个基于CWorkerThread的线程实现方法,通过派生类CMyWorkerThread的具体实现,展示了如何启动线程并执行特定任务。该示例中,线程周期性地输出信息,并能够与CMainFrame类进行交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1. 基类
class CWorkerThread : public CObject
{
 DECLARE_DYNAMIC(CWorkerThread)
public:
 CWorkerThread()
 {
  m_pHost = NULL;        
 }
 virtual ~CWorkerThread()
 {
 }
// Attributes
public:
// Operations
public:
 void StartThread()
 {
  AfxBeginThread(GenericThreadFunc, this);
 }
// Overrides
 virtual  UINT ThreadFunc()
 {
  //ASSERT(m_pHost);
  return 0L;
 }
 LPVOID GetHost()
 {
  return m_pHost;
 }
 void SetHost(LPVOID pHost)
 {
  ASSERT(pHost);
  m_pHost = pHost;
 }
// Implementation
private:
 static UINT GenericThreadFunc(LPVOID lp_)
 {
   CWorkerThread* m_pWrapper = (CWorkerThread*)lp_;
   return m_pWrapper->ThreadFunc();
 }
 LPVOID m_pHost;
};
 
2. 具体类
class CMainFrame;
class CMyWorkerThread : public CWorkerThread 
{
public:
 CMyWorkerThread();
 virtual ~CMyWorkerThread();
 virtual  UINT ThreadFunc();
};
 
UINT CMyWorkerThread::ThreadFunc()
{
 ASSERT(((CMainFrame*)m_pHost)->IsKindOf(RUNTIME_CLASS(CMainFrame)));
 
 for (int _i = 0; _i < 4000; _i++)
 {
  // if (WAIT_OBJECT_0 == WaitForSingleObject(m_pHost->m_hExitEvent, 0))
  //  return 1L;
 
  TRACE("Hello, Thread/n" );
 }
 return 0L;
}


3. 使用
 
CMyWorkerThread m_MyThread;

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
 
//...

 m_MyThread.SetHost(this);
 m_MyThread.StartThread();
 
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值