VC++多线程

来源:百度知道 编辑:UC知道 时间:2024/06/14 09:13:41
int CThreadTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
HWND hWnd=GetSafeHwnd();
AfxBeginThread(TreadProc,hWnd,THREAD_PRIORITY_NORMAL);
return 0;
}这是线程创建函数。

UINT TreadProc(LPVOID param)
{
CThreadTestApp *pApp=(CThreadTestApp *)AfxGetApp();
CMainFrame *pMainFrame=(CMainFrame *)pApp->GetMainWnd();
CThreadTestView *pView=(CThreadTestView *)pMainFrame->GetActiveView();这三行代码编译无错误,运行后显示遇到问题需要关闭,然后调试第一行问题pApp值0xcccccccc{CThreadTestApp ???}param值0x000e0904,第二行问题pApp值0x004178b0 class CThreadTestApp theApp,pMainFrame 值0xcccccccc{CMainFrame hWnd=???}第三行问题pApp值0x004178b0 class CThreadTestApp theApp,pMainFrame值显示0x00000000{CMainFrame hWnd=???},pView值0xcccccccc{CThreadTestView hWnd =???}
我大概可以看出好象是句柄的问题,不过不知道问题是出在哪里,还请高手指点。

晕,你这样怎么可能成功呢
AfxGetApp()函数也就是得到当前的应用(线程),你新建的线程,得到的就是你新建线程的数据,当然是 0xcccccccc了。
下面的几句也不用说了,也是这个问题!

要想得到宿主线程的数据,定义一个数据结构,将这些数据都保存进去,通过AfxBeginThread 的第二个参数,传给线程过程。在线程过程里面处理就行了