mfc创建一个死循环线程时。对话框会被占用。对话框上的任何操作都没响应。
线程里获取一个hwnd参数后。然后循环用sendmessage发送一个回车命令。线程里也只有这句代码。运行后对话框就被占用无法响应了。。只有一个对话框架。没有模态。...
线程里获取一个hwnd参数后。然后循环用sendmessage发送一个回车命令。线程里也只有这句代码。运行后对话框就被占用无法响应了。。
只有一个对话框架。没有模态。 展开
只有一个对话框架。没有模态。 展开
2个回答
展开全部
你的代码出问题是因为没有获取实际运行的实例(对象指针),
CtestDlg fc;
在线程函数中,你这样做等于是创建了一个新的对话框(而且没有初始化界面),这样后续的操作都是不可以的。比较合理的方法,是通过线程的参数,将对话框的this指针传递过去,也可以建立和获取全局指针,不过全局指针比较难以维护。
_beginthread(ThreadProc, 0, (LPVOID)this);
CtestDlg* fc = (CtestDlg *)lpParameter;
fc->abcdef();
这样调整就可以解决你当前出现的问题了。
不过,你这个线程因为是使用CRT工作者线程来操作主线程的界面和消息,可能会有后续隐患,因为没有完整操作代码,不好说。具体请参考“界面线程(UI线程)”的介绍和讲解文章。
CtestDlg fc;
在线程函数中,你这样做等于是创建了一个新的对话框(而且没有初始化界面),这样后续的操作都是不可以的。比较合理的方法,是通过线程的参数,将对话框的this指针传递过去,也可以建立和获取全局指针,不过全局指针比较难以维护。
_beginthread(ThreadProc, 0, (LPVOID)this);
CtestDlg* fc = (CtestDlg *)lpParameter;
fc->abcdef();
这样调整就可以解决你当前出现的问题了。
不过,你这个线程因为是使用CRT工作者线程来操作主线程的界面和消息,可能会有后续隐患,因为没有完整操作代码,不好说。具体请参考“界面线程(UI线程)”的介绍和讲解文章。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询