// net030107Dlg.cpp : implementation file
//......
void CNet030107Dlg::OnOK()
{
DWORD ReceiveThreadId;
hd=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReceiveThread,this, 0, &ReceiveThreadId);
}
void CNet030107Dlg::ReceiveThread(LPVOID Param)
{
CNet030107Dlg *pDlg = (CNet030107Dlg*)Param;
pDlg->iNum=0;//无问题
pDlg->test();//问题处}
void CNet030107Dlg::test()
{
return;
}
......这是我的一段代码。
在ReceiveThread线程中pDlg->test()有问题。并且问题仅发生在debug版。
我想请教一下为什么ReceiveThread线程不能调用CNet030107Dlg的函数?
//......
void CNet030107Dlg::OnOK()
{
DWORD ReceiveThreadId;
hd=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ReceiveThread,this, 0, &ReceiveThreadId);
}
void CNet030107Dlg::ReceiveThread(LPVOID Param)
{
CNet030107Dlg *pDlg = (CNet030107Dlg*)Param;
pDlg->iNum=0;//无问题
pDlg->test();//问题处}
void CNet030107Dlg::test()
{
return;
}
......这是我的一段代码。
在ReceiveThread线程中pDlg->test()有问题。并且问题仅发生在debug版。
我想请教一下为什么ReceiveThread线程不能调用CNet030107Dlg的函数?
解决方案 »
- 文件读取问题请教,比较急呀,请各位帮忙!谢谢啦!!
- 有人可以给我一个vc++开发的含有结构体的dll被vb调用的例子源代码吗?谢谢
- 奇怪的问题:为什么会出现异常
- 关于WNetAddConnection2在XP下映射网络驱动的问题
- 在dll中为什么我的头文件中设置的变量,在cpp中不能赋值!!
- 有谁有B/S 通信的代码啊?
- 我对数据库操作的语句全是用的sql(对SQL SERVER),这样有什么不好的地方吗?
- 一个不易发现的错误(就象 if (a = b) 一样隐藏),大家小心
- 如何在启动时自动删除Temp文件夹里的文件及目录?
- 谁有cv.exe的使用说明啊?
- dll的问题
- 为什么没人答?命不好啊!!!
static void ReceiveThread(LPVOID Param)
pDlg->iNum=0;//无问题
pDlg->test();//问题处
pDlg = (CNet030107Dlg*)Param;
TO ouygg(痞子酷):
我是这么申明的static void ReceiveThread(LPVOID Param)
TO aben456(风轻扬):
pDlg = (CNet030107Dlg*)Param也不行
TO tony1978(突击召唤师).zhaolaoxin():
能否详尽些。
并且问题仅发生在DEBUG版
[email protected]
void CNet030107Dlg::test()
{
//注意:我使用了EDIT控件
UpdateData(FALSE);//问题
UpdateData(TRUE);//问题
return;
}
多谢大家帮忙。
不明白:问题发生在DEBUG版,却在reasle版通过。to rosement()兄:
估计经过这,您早知道是什么原因了。我就不好意思再将代码发给您了。多谢您.
但如果线程函数是MFC窗体的静态成员函数,并且生命周期与窗体生命周期相同,此时的运算是不会出错的。但MFC的检查代码并未智能到这种程度,所以跳出断言,但忽略后还是能正常运行。这就是原因与现象。关键:线程函数必须是MFC窗体的静态成员函数而不是全局函数。
你好。老大,可不可以帮我看看
http://expert.csdn.net/Expert/topic/1367/1367099.xml?temp=.9955255
中的问题。
多谢!
你可以尝试给那个窗口发送消息,让它自己去响应还有,应该将第一句写成:
CNet030107Dlg *pDlg = (CNet030107Dlg*)Param;