新手求教,MFC里UI线程和工作线程的创建和参数传递?

职业炒股 2011-08-29 11:15:34
我想找一个如下的程序

前天发帖了 很不好意思没有及时看
以前只看了一下线程,不了解MFC下的UI线程和工作线程,这里我把疑问说一下,请大家指教一下。
实时显示
我的程序都写在了“运行”响应的函数里,工作线程就是上传和下载,并计算实时速度,下面三种方法:
1.我是把UI线程继续放在原函数里,只创建一个工作的子线程;(这样子会实时显示吗?会不会等子线程工作完才会响应UI线程?这里不懂)
2.在响应函数里创建两个子线程;
3.在响应函数外面创建两个线程,条件判断执行。
这三种方案应该怎么选额。。。求教了。。。

还有就是线程间的参数传递,好像可以参考这个http://topic.csdn.net/u/20091211/15/F7FD13AA-DBC6-4B85-A360-4B0432D0B832.html 问一下,pubic变量子线程可以直接访问吗,子线程里面的变量外面可以直接访问吗?


大家有没有这种实时显示的例子额,给发个参考一下,感觉看理论太纠结了
...全文
346 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
职业炒股 2011-08-29
  • 打赏
  • 举报
回复
有点明白了,很多新手是困扰在消息参数上面,郁闷~ 我还以为看的那个结构体的没啥用呢。。现在再看一遍~
ttktw 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]

在UI中创建工作线程,工作线程处理完成以后发送自定义消息UI线程,在UI线程中更新控件信息

多线程访问同一个公共变量的话,主要同步问题。
[/Quote]
那你就用这个方案吧,定义一个共享的变量,工作线程计算出一次数据后,变量赋值,
然后发送消息给UI线程填写这个变量的数据,或者利用消息参数
职业炒股 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 visualeleven 的回复:]

PostMessage/SendMessage()发送自定义的消息到UI线程啊,创建线程的时候……
[/Quote]
我试试 这样啊
职业炒股 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
在UI中创建工作线程,工作线程处理完成以后发送自定义消息UI线程,在UI线程中更新控件信息
[/Quote]
如果把工作线程做为一个子线程放在UI线程里可以啊,刚才没理解。。。主线程和子线程也是可以同步的 不用等到子线程全部执行完额
Eleven 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hanbingfengying 的回复:]
引用 1 楼 visualeleven 的回复:
在UI中创建工作线程,工作线程处理完成以后发送自定义消息UI线程,在UI线程中更新控件信息

我不能等工作线程处理完才显示,我要在工作线程处理的过程中获取实时下载速度,这样子更新信息哈
[/Quote]
PostMessage/SendMessage()发送自定义的消息到UI线程啊,创建线程的时候将HWND窗口句柄作为线程函数的参数传递给线程
职业炒股 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ttktw 的回复:]
实时显示速度需要看工作者线程计算出速度后是怎么传递给UI线程的,UI线程又是怎样绘制数据的
[/Quote]
所以这里我也不懂啊 我要在工作线程执行过程中获得数据 并传递给UI线程 显示。这里也不会实现。
职业炒股 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
在UI中创建工作线程,工作线程处理完成以后发送自定义消息UI线程,在UI线程中更新控件信息
[/Quote]
我不能等工作线程处理完才显示,我要在工作线程处理的过程中获取实时下载速度,这样子更新信息哈
ttktw 2011-08-29
  • 打赏
  • 举报
回复
实时显示速度需要看工作者线程计算出速度后是怎么传递给UI线程的,UI线程又是怎样绘制数据的
Eleven 2011-08-29
  • 打赏
  • 举报
回复
在UI中创建工作线程,工作线程处理完成以后发送自定义消息UI线程,在UI线程中更新控件信息

多线程访问同一个公共变量的话,主要同步问题。
职业炒股 2011-08-29
  • 打赏
  • 举报
回复
快来人啊。。。多线程的异步消息处理。。。
职业炒股 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 visualeleven 的回复:]
引用 3 楼 hanbingfengying 的回复:
引用 1 楼 visualeleven 的回复:
在UI中创建工作线程,工作线程处理完成以后发送自定义消息UI线程,在UI线程中更新控件信息

我不能等工作线程处理完才显示,我要在工作线程处理的过程中获取实时下载速度,这样子更新信息哈

PostMessage/SendMessage()发送自定义的消息到UI线程啊,创建线程的时候……
[/Quote]
我定义了一个类作为参数传递,可以实现额,O(∩_∩)O哈哈~ 谢谢
又有问题了,是关于这两个线程之间的消息传递
就是你说的同步异步的问题

传送实时上传下载速度的时候我用异步 其他的同步
postmessage(); 另一边peekmessage();
如何保证异步时发送的和收到的消息数目一样呢? 建立一个计数变量,还是有什么清空消息队列的方法?

15,471

社区成员

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

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