To JJONY 我传GetSafeHwnd()仍然是第一次的错误 error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (__cdecl *)(long)'
error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (long)'
error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (long)'这个问题完全是参数不对造成的,不是原理或程序逻辑上的错误。 好好看一下MSDN严格用AfxBeginThread中参数定义的格式去使用。
如下:
CMyDlg::OnInitDialog()
{
lpMyThread=AfxBeginThread(CMyDlg::ThreadProg, this,......);
}
CMyDlg::DoWork()
{
...
}
UINT CMyDlg::ThreadProc(LPARAM lparam)
{
CMyDlg* lpdlg=(CMyDlg*)lparam;
...
lpdlg->DoWork();
...
}
建立线程,窗口退出时销毁线程,如下:
CMyDlg::OnInitDialog()
{
lpMyThread=AfxBeginThread(CMyDlg::ThreadProc,this,......);
...
}
CMyDlg::DoWork()
{
...
}
UINT CMyDlg::ThreadProc(LPARAM lparam)
{
CMyDlg* lpMyDlg=(CMyDlg*)lparam;
......
lpMyDlg->DoWork();
......}
error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (long)'
这是怎么回事?
{
CMyDlg* lpMyDlg=(CMyDlg*)lparam;
......
lpMyDlg->DoWork();
......}
的申明改为static
或者直接用全局函数
UINT ThreadProc(LPARAM lparam)
{
}
{
lpMyThread=AfxBeginThread((AFX_THREADPROC)CMyDlg::ThreadProc,this,......);
...
}
LPARAM类型。
error C2440: '=' : cannot convert from 'class CWinThread *' to 'class CWinApp *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
~~~~
先改成0看看编译能不能通过
其次线程函数定义:UINT MyFunction( LPVOID pParam );
~~~~~~再强之转化
在线程间传递dlg对象指针是不行的,这是MFC的一个BUG,但是可以传递dlg的handle,然后在thread里用CWND::FromHandle重建这个对象就可以了.还可以用来PostMessage().
我传GetSafeHwnd()仍然是第一次的错误
error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (__cdecl *)(long)'