积极答复者
创建UI线程

问题
-
MFC windows程序设计P887页举了个创建UI线程的例子,不过没有列出完整代码,我照着写了一遍,编译通过,但运行么也没有!任务管理器里都没有相关信息。代码如下:
#include <afxwin.h>
class CMainWindow : public CFrameWnd
{
public:
CMainWindow();
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
};CMainWindow::CMainWindow()
{
Create(NULL, _T("UIThread Window"));
}BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
PostMessage(WM_CLOSE);
}class CUIThread : public CWinThread
{
DECLARE_DYNCREATE(CUIThread)
public:
virtual BOOL InitInstance();
};IMPLEMENT_DYNCREATE(CUIThread, CWinThread)
BOOL CUIThread::InitInstance()
{
m_pMainWnd=new CMainWindow;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return CWinThread::InitInstance();
}
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));
}怀疑是不是main函数没写对,书中只告诉用AfxBeginThread创建线程。main函数是我自己写的。
工程是一个空的win32 project属性里用use MFC in a shared DLL
答案
-
是。你的线程没启动完,整个进程就结束了,所以什么都没看到。VC的文档中还有其他MFC多线程示例,例如MTGDI和MTMDI,你可以去看看。
MSMVP VC++- 已建议为答案 Sheng Jiang 蒋晟Moderator 2009年2月3日 5:07
- 已标记为答案 Sheng Jiang 蒋晟Moderator 2009年2月12日 4:07
-
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));
::Sleep(INFINITE);
return 0;
}
主进程结束会自动结束所有的线程
这样写你的主进程就不会结束了,你就可以看到分线程的运行了
Hello world- 已建议为答案 Sheng Jiang 蒋晟Moderator 2009年2月3日 5:07
- 已标记为答案 Sheng Jiang 蒋晟Moderator 2009年2月12日 4:07
全部回复
-
是。你的线程没启动完,整个进程就结束了,所以什么都没看到。VC的文档中还有其他MFC多线程示例,例如MTGDI和MTMDI,你可以去看看。
MSMVP VC++- 已建议为答案 Sheng Jiang 蒋晟Moderator 2009年2月3日 5:07
- 已标记为答案 Sheng Jiang 蒋晟Moderator 2009年2月12日 4:07
-
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));
::Sleep(INFINITE);
return 0;
}
主进程结束会自动结束所有的线程
这样写你的主进程就不会结束了,你就可以看到分线程的运行了
Hello world- 已建议为答案 Sheng Jiang 蒋晟Moderator 2009年2月3日 5:07
- 已标记为答案 Sheng Jiang 蒋晟Moderator 2009年2月12日 4:07