最近接触到多线程,想做个程序练习一下,现在碰到一个问题
我创建了一个对话框工程,想让几个线程把当前的运行结果显示在
对话框的文本框中,但我不知道如何在我的线程函数中操作对话框上的控件
我能在线程中对类声名的变量进行操作吗
UINT CMyDlg::WorkThread1(LPVOID wParam) //线程
{
//m_static1.SetWindwosText...
//m_static1是我设给一个控件变量
//请问在这里为什么不能对它进行操作
return 1;
}
我创建了一个对话框工程,想让几个线程把当前的运行结果显示在
对话框的文本框中,但我不知道如何在我的线程函数中操作对话框上的控件
我能在线程中对类声名的变量进行操作吗
UINT CMyDlg::WorkThread1(LPVOID wParam) //线程
{
//m_static1.SetWindwosText...
//m_static1是我设给一个控件变量
//请问在这里为什么不能对它进行操作
return 1;
}
建议先仔细看看书
2. 线程中控制CMyDlg 用AfxGetMainWnd()->m_wnd获得句柄
AfxGetMainWnd()->m_wnd->m_static1;
在CMyDlg中定义
struct ParamToThread
{
CMyDlg *pInstance;
int iNum;
};CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
...
ParamToThread *pParamToThread;
pParamToThread->pInstance = this;
pParamToThread->iNum = 0;
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread1, pParamToThread, 0, NULL);
}
但我在全局的线程中该怎么获取对话框的指针
UINT WorkThread1(LPVOID wParam) //工作线程
{
int index;
CMy7Dlg *pDlgInstance;
//ParamToThread *pParamToThread;
//pParamToThread = (ParamToThread * )(wParam);
//index = pParamToThread->iNum;
//pDlgInstance = pParamToThread->pInstance; //delete pParamToThread;
return 1;
}
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread1, pParamToThread, 0, NULL);
改为
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread1, this, 0, NULL);在UINT WorkThread1(LPVOID wParam)中:
CMy7Dlg *pDlgInstance;
pDlgInstance = wParam;
然后就可以使用了
我试了一下,不过pDlgInstance = wParam;这句有报错:
error C2440: '=' : cannot convert from 'void *' to 'class CMyDlg *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
不知道是什么原因