因为从线程要从CXXDlg类中取一些变量,我又不想用静态变量,不知从线程能不能直接从CXXDlg类对象中获得这些变量.我已经用参数将其句柄送入线程.
即将CreateThread()第三个参数设为CXXDlg类对象的成员m_hWnd,而在线程中用FromHandle重新构建CXXDlg类对象的指针,并取得了对象的成员变量,可是成员变量的值并不能与实际窗口的同步.不知是何原因,有何解决方法.
请高手帮忙!
即将CreateThread()第三个参数设为CXXDlg类对象的成员m_hWnd,而在线程中用FromHandle重新构建CXXDlg类对象的指针,并取得了对象的成员变量,可是成员变量的值并不能与实际窗口的同步.不知是何原因,有何解决方法.
请高手帮忙!
如果窗口结束时线程没结束就会出错的,所以要有一个全局变量来标志传进去的CWnd指针是否已经被析构
CXXXDlg* pDlg=(CXXXDlg*)AfxGetMainWnd();//if your programe is dialog based.
格式如下:(在窗口类的某函数中)
AfxBeginThread(MyThread,this);
pDlg->m_Data.
struct THREADINFO
{
LOGFONT Font;
unsigned char FileName[_MAX_FNAME];
CWaitMakedDlg* pWaitDlg;
};
THREADINFO* pT = (THREADINFO*)HeapAlloc(
GetProcessHeap(),
HEAP_ZERO_MEMORY,
sizeof(THREADINFO));
strcpy((char*)pT->FileName, Name);
memcpy(&(pT->Font), &font, sizeof(LOGFONT));
pT->pWaitDlg = pWaitDlg; m_pThread = AfxBeginThread(
CommProc,
(LPVOID)pT,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED,
NULL);先创建一个数据结构,保存你要传递的东西,
用HeapAlloc开一片空间,把指针作为参数传到线程中
OK?
《win核心编程》
注意C r e a t e T h r e a d函数是用来创建线程的Wi n d o w s函数。不过,如果你正在编写
C / C + +代码,决不应该调用C r e a t e T h r e a d。相反,应该使用Visual C++运行期库函数
_ b e g i n t h r e a d e x。如果不使用M i c r o s o f t的Visual C++编译器,你的编译器供应商有它自
己的C r e a t e T h r e d替代函数。不管这个替代函数是什么,你都必须使用。本章后面将要
介绍_ b e g i n t h r e a d e x能够做什么,它的重要性何在。
///////////////////////////////////////////////////////
以上摘自《win核心编程》第6章第4页