请问如何将多线程里得到的数据,显示到mfc界面上?

tunaG 2013-01-18 05:29:15
本人小菜鸟级别,做了个mfc的测试软件
将每台设备的信息、测试操作等封装到一个类里,然后将创建的设备对象插入到一个list容器里,界面点按钮就会访问容器,然后依次去调用对象里的测试函数。

测试函数里是起了一个线程。

请问,怎样将测试结果反馈到界面上~

拜托各位了~~~
email:247386207@qq.com


...全文
720 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
Emilio66 2015-04-02
  • 打赏
  • 举报
回复
引用 2 楼 jason_wentzel 的回复:
将你的类对象指针当参数传进线程,比如 CTestDialog *dlg = .....; DWORD dwThreadID = 0; CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadTest,dlg ,0,&dwThreadID); DWORD ThreadTest(LPVOID wParam) { CTestDialog *pDlg = (CTestDialog *)wParam; if(pDlg != NULL) { while(...) { ..... } pDlg->PostMessage(.....);线程中通过发送消息给界面进行更新,不要直接更新界面, 否则是不安全调用. } return 0; }
我持续更新页面程序就崩溃了!! debug说访问冲突,有未处理的异常
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 17 楼 hjx_1000 的回复:
::PostMessage函数的后两个参数就是用于存放向目标窗口发送的数据
我想将 “hello world”发过去,请问该怎么实现啊,帮我写下吧。 PostMessage这个里面的参数,好像没有能直接放字符串的。
逍遥子_ 2013-01-21
  • 打赏
  • 举报
回复
::PostMessage函数的后两个参数就是用于存放向目标窗口发送的数据
逍遥子_ 2013-01-21
  • 打赏
  • 举报
回复
当前窗口的就是:m_hWnd 直接用就行了,它是窗口类自带的成员变量
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 13 楼 hjx_1000 的回复:
以前写的一个线程与窗口互相通信的小程序,希望对你有用哟: http://blog.csdn.net/hjx_1000/article/details/8476092
弱弱的问下,我想发送的数据,往哪写啊。
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 13 楼 hjx_1000 的回复:
以前写的一个线程与窗口互相通信的小程序,希望对你有用哟: http://blog.csdn.net/hjx_1000/article/details/8476092
请问当前操作的界面的句柄怎么得到啊?
逍遥子_ 2013-01-21
  • 打赏
  • 举报
回复
以前写的一个线程与窗口互相通信的小程序,希望对你有用哟: http://blog.csdn.net/hjx_1000/article/details/8476092
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 11 楼 smilenot 的回复:
2楼的方法就可以了 楼主多尝试
如果在主界面里调用另一个界面,我会这么用,但是我的流程是: 在主界面上点击按钮->调用另一个文件的类里的多线程->将这些线程得到的结果显示到主界面上。 这样就不会了。
smilenot 2013-01-21
  • 打赏
  • 举报
回复
2楼的方法就可以了 楼主多尝试
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 9 楼 sha_jinhao 的回复:
在dodataexchange里面操作!
不清楚怎么在这里面操作,你能加我qq号,指导下吗? qq:247386207
jimette 2013-01-21
  • 打赏
  • 举报
回复
在dodataexchange里面操作!
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 2 楼 jason_wentzel 的回复:
将你的类对象指针当参数传进线程,比如 CTestDialog *dlg = .....; DWORD dwThreadID = 0; CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadTest,dlg ,0,&dwThreadID); DWORD ThreadTest(LPVOID wParam) {……
我的界面和起线程的操作在两个文件的两个类里,好像不能直接这么做啊
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 1 楼 sha_jinhao 的回复:
做一个dialog 用updatedata(true); 更新
有界面啊,就是不知道怎么将测试结果传过去。
逍遥子_ 2013-01-21
  • 打赏
  • 举报
回复
使用GetBuffer()将CString转换为char* ; 例如:char* filename = csFileName.GetBuffer();
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 26 楼 hjx_1000 的回复:
如24楼所说,在函数onState里看下句柄的值是否正确。
确实是句柄传的不对,非常感谢~~~ 不过还有个问题哈。 需要发的消息都是 CString 类型的。请问怎么在 PostMessageA 这里使用啊。
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 24 楼 arpnet99 的回复:
引用 23 楼 gllg1314 的回复:引用 21 楼 arpnet99 的回复://发送消息代码。这里还没进到线程里,先在起线程的上一级,测试了下。 VOID CDevOper::Get(HWND m_hMainWnd,int flag){ char szBuf[64]={0}; sprintf(szBuf,"%s","hello world")……
谢谢。
逍遥子_ 2013-01-21
  • 打赏
  • 举报
回复
如24楼所说,在函数onState里看下句柄的值是否正确。
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 22 楼 hjx_1000 的回复:
1、你先单步执行一下,在函数onState里打个断点看程序是否进入该函数。 2、你的工程是使用的多字节的,而pbuf是char类型的指针,你将char* 修改为WCHAR*
我试了下,把在同一个类里发送信息,是可以发送到界面控件里的。但是在CDevOper类里发送,调试发现onState没有接受到消息。
这不是鸭头 2013-01-21
  • 打赏
  • 举报
回复
引用 23 楼 gllg1314 的回复:
引用 21 楼 arpnet99 的回复://发送消息代码。这里还没进到线程里,先在起线程的上一级,测试了下。 VOID CDevOper::Get(HWND m_hMainWnd,int flag){ char szBuf[64]={0}; sprintf(szBuf,"%s","hello world"); SendMessageA( ……
那就是m_hMainWnd不对。
tunaG 2013-01-21
  • 打赏
  • 举报
回复
引用 21 楼 arpnet99 的回复:
//发送消息代码。这里还没进到线程里,先在起线程的上一级,测试了下。 VOID CDevOper::Get(HWND m_hMainWnd,int flag){ char szBuf[64]={0}; sprintf(szBuf,"%s","hello world"); SendMessageA( m_hMainWnd,ID_MSG_STA……
我试了下,把在同一个类里发送信息,是可以发送到界面控件里的。但是在CDevOper类里发送,调试发现onState没有接受到消息。
加载更多回复(10)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧