我从CWinThread派生一个线程,如下:
class CMyThread : public CWinThread
{
DECLARE_DYNCREATE(CMyThread)protected:
// Constructor
CMyThread(); // protected constructor used by dynamic creation
// Deconstructor
virtual ~CMyThread();// Interfaces
public:
// Start work process
BOOL StartWork(LPCTSTR lpszFileName);
// Stop work process
BOOL StopWork(void);
// Init the instance
virtual BOOL InitInstance();
// Exist
virtual int ExitInstance();protected:
DECLARE_MESSAGE_MAP()
};在主程序启动时候创建这个线程,如下:
m_pThread = (CMyThread *)AfxBeginThread(
RUNTIME_CLASS(CMyThread ),
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED
);
ASSERT(m_pThread != NULL);
VERIFY(m_pThread->ResumeThread());然后,我调用这个线程的函数StartWork,如下
m_pThread->StartWork("aaa");因为StartWork里是很耗时的计算,所以如果主线程执行运算,界面会停止响应;我这样写法是启动另外一个线程来执行这个复杂运算,可是不起效果,为什么?怎么会还在主线程里面执行这个运算啊,而不是在这个线程里执行运算?
class CMyThread : public CWinThread
{
DECLARE_DYNCREATE(CMyThread)protected:
// Constructor
CMyThread(); // protected constructor used by dynamic creation
// Deconstructor
virtual ~CMyThread();// Interfaces
public:
// Start work process
BOOL StartWork(LPCTSTR lpszFileName);
// Stop work process
BOOL StopWork(void);
// Init the instance
virtual BOOL InitInstance();
// Exist
virtual int ExitInstance();protected:
DECLARE_MESSAGE_MAP()
};在主程序启动时候创建这个线程,如下:
m_pThread = (CMyThread *)AfxBeginThread(
RUNTIME_CLASS(CMyThread ),
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED
);
ASSERT(m_pThread != NULL);
VERIFY(m_pThread->ResumeThread());然后,我调用这个线程的函数StartWork,如下
m_pThread->StartWork("aaa");因为StartWork里是很耗时的计算,所以如果主线程执行运算,界面会停止响应;我这样写法是启动另外一个线程来执行这个复杂运算,可是不起效果,为什么?怎么会还在主线程里面执行这个运算啊,而不是在这个线程里执行运算?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货