有谁能帮我看一下在MFC 里这样的使用线程为什么不行,说函数调用缺少参数列表什么的?

void CADSL_Auto_DialDlg::OnBnClickedButton1()
{
CWinThread *thread;
thread=AfxBeginThread(&CADSL_Auto_DialDlg::RasDial_Go,(LPVOID)this);
CWinThread *thread;
thread=AfxBeginThread(RasDial_Go,(LPVOID)this);

第一,thread=AfxBeginThread(&CADSL_Auto_DialDlg::RasDial_Go,(LPVOID)this);这里你是想用CADSL_Auto_DialDlg这个类的成员函数RasDial_Go作线程入口函数,对吧?但是,线程入口函数不能为成员函数,除非它是静态函数,再要么就用全局函数。
第二,(LPVOIDthis。这里你是想用当前实例指针this作为参数,就不用在前面用(LPVOID)了。
第三,*thread是线程句柄,你创建的两个线程用同一个句柄,肯定是不合适的。
第四,你第二个线程创建函数的第一个括号格式不对,是中文的括号,要用英文输入法的括号追问

其他的地方没什么大问题。主要问的是线程的第一个参数调用不正确。就是不知道这个静态的函数怎么在CADSL_Auto_DialDlg类中调用???因为它一直是提示说不能在这个类里调用静态函数什么的?唉。。

追答

就是不知道这个静态的函数怎么在CADSL_Auto_DialDlg类中调用???

这句话什么意思?“这个静态的函数”是指什么?

追问

就是你说的这个。。”线程入口函数不能为成员函数,除非它是静态函数,“。。。在类CADSL_Auto_DialDlg中调用线程入口函数。。说什么非静态成员函数不能调用的提示错误。。还是希望能提供一下代码例子就明白啦!!

追答

那你的第一个线程创建函数里的线程入口函数名直接用RasDial_Go,不用写成(&CADSL_Auto_DialDlg::RasDial_Go。然后在这个入口函数里面,如果是对CADSL_Auto_DialDlg这个类的其它非静态成员变量或成员函数进行调用,那就要通过this来调用这个类的实例了。入口函数的定义应该是这样
RasDial_Gl(LPVOID lpParam)
{
CADSL_Auto_DialDlg* pDlg=(CADSL_Auto_DialDlg*)lpParam;
/// 这样,通过pDlg->来调用成员变量和成员函数
}
线程创建函数应该是这样
thread=AfxBeginThread(RasDial_Go,this);

温馨提示:答案为网友推荐,仅供参考
相似回答