VS2010开发C++窗口程序,点击按钮后启动子线程,子线程处理数据后,如何将数据显示到窗口控件上? 100

如题://创建主窗口并运行它MainForm^myForm=gcnewMainForm();Application::Run(myForm);//启动线程方式,在Main... 如题:
// 创建主窗口并运行它
MainForm ^ myForm = gcnew MainForm();
Application::Run(myForm);

//启动线程方式,在MainForm类中
public: Thread ^ thread1; bolol canRun;
button_Click(System::Object^ sender, System::EventArgs^ e) {……
thread1 = gcnew Thread (gcnew ThreadStart(myFunction));
thread1->Start();……
}
//子线程代码简要,该部分代码可以再单独类,也可以在MainForm类中
void myFunction(){
while (canRun) {
//do some
if(bool) {
//这里就是处理完数据,要更新窗口控件,请问在这如何修改主窗口,或者如何通知主线程一个消息,让主线程来安排更新窗口?【或者要怎样修改,在线急等】
}}

//请注意,网上抄来的内容可以提供参考,采纳的答案希望是对我的代码进行修改并能够有效解决问题的,谢谢
展开
 我来答
望穿秋水待伊人
2012-09-18 · TA获得超过644个赞
知道小有建树答主
回答量:708
采纳率:100%
帮助的人:791万
展开全部
用全局变量来保存子线程里需要更新的值 ,创建一个互斥对象,让子线程占用互斥对象,在start函数后面waitforsingleobject,等待线程结束时释放互斥对象,这样,当waitforsingleobject获得互斥对象时,就可以更新主线程窗口了。这其实就是简单的线程同步问题。
更多追问追答
追问
您好,现在的数据都是保存在全局变量里面,这个没问题。

另外你说start后面加个waitsingle,线程结束释放互斥对象。其实这个子线程是永远执行的,一直处理数据,处理好一个就返回一个,提示form更新。

恕我愚笨,请问可否写一个简单的form程序,包含按钮和combox。可以不要关闭进程的部分,combox只有反应线程start后处理的内容,可以超时将新值赋予combox显示。
追答
你既然用到.net类库,为什么不直接用C#,C++.net的语法太怪异,我不太熟。在C#里,这样的处理是通过Invoke来进行的。
wind556
2012-09-19 · TA获得超过250个赞
知道小有建树答主
回答量:673
采纳率:50%
帮助的人:275万
展开全部
给你的控件窗口发送自定义消息
更多追问追答
追问
请问具体如何实现?能否给出代码一看
追答
postmessage 你一百度 啥都有了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式