我从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里是很耗时的计算,所以如果主线程执行运算,界面会停止响应;我这样写法是启动另外一个线程来执行这个复杂运算,可是不起效果,为什么?怎么会还在主线程里面执行这个运算啊,而不是在这个线程里执行运算?

解决方案 »

  1.   

    回楼上,因为主界面停止响应了。另外,因为复杂运算是COM计算,我只是在这个CMyThread的InitInstance里面调用CoInitialize(),运行错误,而把这个函数调用放到主线程的InitInstance函数中就OK了。我就是搞不懂,为什么会这样,所以很郁闷。
      

  2.   

    主界面停止反映是应为StartWork()没有返回引起的吧,你仔细看一下函数的实现
      

  3.   

    对,StartWork确实没有返回。那应该如何实现才能让后台的Thread执行这个操作而立刻返回。因为我要得到Thread 的一些状态参数,所以没有采用普通的ThreadFunc定义个格式。
      

  4.   

    搞定了,设置一个Event来同步就OK。