MFC如何在自定义函数中调用控件变量

我做的是生产者—消费者问题,要在线程起点函数DWORDWINAPIProducer(LPVOIDlpPara)中输出信息到编辑框控件,但调试时无法引用,怎么做啊?... 我做的是生产者—消费者问题,要在线程起点函数DWORD WINAPI Producer(LPVOID lpPara)中输出信息到编辑框控件,但调试时无法引用,怎么做啊? 展开
 我来答
john_lee1969
2014-07-10 · TA获得超过1697个赞
知道小有建树答主
回答量:419
采纳率:100%
帮助的人:508万
展开全部
线程函数要定义为控件所在的父窗口类的“静态成员函数”,其参数要给定为该窗口类的对象指针,在调用CreateThread创建线程时,由于线程函数的参数不是 void*,所以需将线程函数强制为 LPTHREAD_START_ROUTINE 类型,在线程函数里,可以通过参数传递进来的窗口指针访问其中的控件了。
例:
class CMyDialog : public CDialog { // 窗口类
...
CEdit m_edtMyEdit; // 编辑框控件对象
static DWORD WINAPI MyThreadRoutine (CMyDialog* pMyDialog); // 线程函数(静态成员函数),参数为窗口类指针
...
};

DWORD WINAPI CMyDialog::MyThreadRoutine (CMyDialog* pMyDialog) // 线程函数
{
...
pMyDialog->m_edtMyEdit.SetWindowText("MyEdit"); // 通过pMyDialog访问成员
...
}

可以在OnInitDialog中或合适的时机创建线程:
CreateThread (..., // 线程安全属性
..., // 栈大小
LPTHREAD_START_ROUTINE(MyThreadRoutine), // 线程函数,注意强制
this, // 线程函数的参数,必须是窗口类的对象指针,this就可以了。
..., // 线程创建属性
...); // 线程ID
更多追问追答
追问
CreatThread的MyThreadRoutine找不到,未定义?
追答
MyThreadRoutine是窗口类的静态成员函数啊,你调用CreateThread时,必须在该类的作用域内,例如对话框的OnInitDialog函数里。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qq841900631
2014-07-10
知道答主
回答量:2
采纳率:0%
帮助的人:2591
展开全部
将对象传进去
更多追问追答
追问
怎么传啊?具体些,在哪里加上什么代码,菜鸟一个,求教啊
追答
你在CreateThread的时候第四个参数是可以穿入一个参数,然后你的DWORD  WINAPI Producer(LPVOID lpPara)中LPVOID lpPara是接受到这个参数,你可以在CreateThread的时候传入一个this指针
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式