偶在对话框中创建了一个CProcessStrl控件,并用m_p1变量来进行控制。
然后,写了一个全局函数
UINT Add(LPVOID p)
{
int i=p.GetPos();
for(i;i<100;i++)
{
p.SetPos(i);
Sleep(1000);
}
return 1;
}然后应按钮单击来触发事件
void CThreadDlg::OnStart()
{
CWinThread *m_thread=AfxBeginThread(Add,m_p1);
}不能通过编译,提示SetPos和GetPos函数的左边必须是类/结构/联合体。请问要如何传递这个参数???先不管程序的正确性如何,偶就想知道,我们传递不进去呢?要怎么样传递?
然后,写了一个全局函数
UINT Add(LPVOID p)
{
int i=p.GetPos();
for(i;i<100;i++)
{
p.SetPos(i);
Sleep(1000);
}
return 1;
}然后应按钮单击来触发事件
void CThreadDlg::OnStart()
{
CWinThread *m_thread=AfxBeginThread(Add,m_p1);
}不能通过编译,提示SetPos和GetPos函数的左边必须是类/结构/联合体。请问要如何传递这个参数???先不管程序的正确性如何,偶就想知道,我们传递不进去呢?要怎么样传递?
所以你需要把p转化为CProcessStrl类的指针,然后调用其方法,才能进行类型和内存大小判定
{
CProcessStrl* p = (CProcessStrl*)p;
int i=p->GetPos();
for(i;i<100;i++)
{
p->SetPos(i);
Sleep(1000);
}
return 1;
}
void CThreadDlg::OnStart()
{
CWinThread *m_thread=AfxBeginThread(Add,(LPVOID)&m_p1);
}
{
CProcessStrl* p = (CProcessStrl*)param;
int i=p->GetPos();
for(i;i<100;i++)
{
p->SetPos(i);
Sleep(1000);
}
return 1;
}
void CThreadDlg::OnStart()
{
CWinThread *m_thread=AfxBeginThread(Add,(LPVOID)&m_p1);
}
1,参数使用问题,缺少类型转换
2,控件的方法调用问题,在子线程里不可直接访问,通过中间方法
修改如下:
添加方法:
void CThreadDlg::SetPressPos(int intPos)
{
m_p1.SetPos(intPos);
}void CThreadDlg::GetPressPos(int &intPos)
{
intPos = m_p1.GetPos();
}UINT Add(LPVOID p)
{
CProcessStrl* pPrc =(CProcessStrl* )p;
int intPos;
pPrc.GetPressPos(intPos); for(i;i<100;i++)
{
pPrc.SetPos(intPos);
Sleep(1000);
}
return 1;
}