首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

多个线程如果共用同个线程函数,是否拥有各自的数据区域解决办法

2012-03-14 
多个线程如果共用同个线程函数,是否拥有各自的数据区域多个线程如果线程函数是同一个函数,比如 fun(),那么

多个线程如果共用同个线程函数,是否拥有各自的数据区域
多个线程如果线程函数是同一个函数,比如 fun(),那么他们在运行的时候是自己拥有一份该函数的拷贝(即各自的数据区域),还是共用一份(如果是共用一份,那肯定会出错吧)。

现在我有个需求,求大家给点建议:

要从服务器上下4张图片,下完后把他们合成为1张, 我以前用的是单线程中用CInternetSession下载4次后再合成,结果老大们说效率不行(我觉得是服务器不行),要改成并发下载.

我使用4个线程下载4个图片后,再用一个线程去合成可以吗?这样就是 4 + 1 个线程,如何同步呢?特别是合成的线程,要等待多个事件? 
或者4个线程下载后,再发消息给UI线程去合成(当然,要判断一下4个都下好了再合成),哪个比较好了

[解决办法]
线程共享进程的数据
[解决办法]
共用一份代码,局部变量分开
[解决办法]
每个线程有自己的栈空间
堆空间是共享的,但不会冲突
[解决办法]
如果你的4个工作现场不设计到操作公共缓冲区(读写,至少有个线程需要写缓冲区数据),则不需要考虑同步
[解决办法]
用WaitForMultipleObjects等待四个线程全部结束
[解决办法]
WaitForMultipleObjects
[解决办法]
UI线程中WaitForMultipleObjects等待四个子线程完成后再合成
[解决办法]
没错,比如下载软件128个线程,都是独立的。
[解决办法]
兄弟你刚回答了我一个问题,我也来回答你问题
其实函数永远只有一份,唯一变的是局部变量,比如递归
你这个问题不需要同步,直接一次性分配所有空间,然后给每个线程分配一个空间,下载下来以后就写入各自分配缓冲区就是了,当最后一个线程执行结束,整个数据就接收OK了。
如果还有问题,给我发消息
[解决办法]
局部变量不共享,全局、静态变量共享,注意全局、静态变量使用时线程同步就行了

热点排行