VC++MFC对话框中创建线程调用问题

我在对话框中创建了一个线程,但是调用对话框中的控件会出错,提示不支持尝试执行操作。请各位朋友指点下,谢谢!代码如下:voidCtestDlg::abcdef(){Upda... 我在对话框中创建了一个线程,但是调用对话框中的控件会出错,提示不支持尝试执行操作。请各位朋友指点下,谢谢!代码如下:void CtestDlg::abcdef(){ UpdateData(TRUE); if (m_Powerboot_check_bool == 1) { Powerboot(); }}void ThreadProc(LPVOID lpParameter){ while (TRUE) { int i = 2; if (i > 1) { CtestDlg fc; fc.abcdef(); break; } Sleep(2000); }}void CtestDlg::OnBnClickedButton1(){ _beginthread(ThreadProc, 0, NULL);} 展开
 我来答
bhtzu
2016-11-16 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4261万
展开全部
你的代码出问题是因为没有获取实际运行的实例(对象指针),
CtestDlg fc;
在线程函数中,你这样做等于是创建了一个新的对话框(而且没有初始化界面),这样后续的操作都是不可以的。比较合理的方法,是通过线程的参数,将对话框的this指针传递过去,也可以建立和获取全局指针,不过全局指针比较难以维护。
_beginthread(ThreadProc, 0, (LPVOID)this);
CtestDlg* fc = (CtestDlg *)lpParameter;
fc->abcdef();
这样调整就可以解决你当前出现的问题了。

不过,你这个线程因为是使用CRT工作者线程来操作主线程的界面和消息,可能会有后续隐患,因为没有完整操作代码,不好说。具体请参考“界面线程(UI线程)”的介绍和讲解文章。
小呆瓜
2016-11-16 · 知道合伙人金融证券行家
小呆瓜
知道合伙人金融证券行家
采纳数:2850 获赞数:12626
从事C++行业多年

向TA提问 私信TA
展开全部
你这函数调用的也太乱了点吧。。
void ThreadProc过程函数中while和if条件始终为真,循环不会终止;
void CtestDlg::abcdef()中m_Powerboot_check_bool这个bool型变量是否初始化了;
Powerboot()这个函数在哪里申明和定义的。
追问
Powerboot(); testDlg.h : 头文件调用的
public:
afx_msg void OnBnClickedButton1();

void abcdef();
CString m_strUser;
CString m_strPwd;
BOOL m_Powerboot_check_bool;
void Powerboot();
创建线程调用一次就可以了 有判断退出循环的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式