我在子线程中需对主窗体的控件做操作
代码简写如下:
void MyDlg::OnBnClickedButton1()
{
.......
ThreadHandle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThreadProc,
NULL,0,&thread_ID);
}
static void MyThreadProc(void)
{
m_CEdit.SetWindowText("....")
//原意是m_CEdit是主窗体的文本控件,子线程对它做操作
}编译错误,貌似是MyThreadProc是静态,不识别我主窗体控件
想请各位解决完成此功能,最好有简单实例,先谢谢了
代码简写如下:
void MyDlg::OnBnClickedButton1()
{
.......
ThreadHandle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThreadProc,
NULL,0,&thread_ID);
}
static void MyThreadProc(void)
{
m_CEdit.SetWindowText("....")
//原意是m_CEdit是主窗体的文本控件,子线程对它做操作
}编译错误,貌似是MyThreadProc是静态,不识别我主窗体控件
想请各位解决完成此功能,最好有简单实例,先谢谢了
this,0,&thread_ID);
static void MyDlg::MyThreadProc(LPVOID param)
{
MyDlg * p = (MyDlg *)param;
p->m_CEdit.SetWindowText("....")
}
void MyDlg::OnBnClickedButton1()
{
.......
ThreadHandle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThreadProc,
this,0,&thread_ID);
}
DWORD WINAPI MyThreadProc(LPVOID lpParameter)
{
CMyDlg *dlg = (CMyDlg *)lpParameter;
dlg->m_CEdit.SetWindowText("....");
return 0;
}
不要这样!
MFC的CWnd类不是线程安全的,源于TLS的MAP。
若要使用,则通过对话框的指针来引用,而这个对话框的指针则通过createThread函数传递到线程中.具体实现代码楼上各位已提供了.贴一段如下
ThreadHandle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyThreadProc,
this,0,&thread_ID);
static void MyDlg::MyThreadProc(LPVOID param)
{
MyDlg * p = (MyDlg *)param;
p->m_CEdit.SetWindowText("....")
}