现在我有个需求,求大家给点建议:
要从服务器上下4张图片,下完后把他们合成为1张, 我以前用的是单线程中用CInternetSession下载4次后再合成,结果老大们说效率不行(我觉得是服务器不行),要改成并发下载.
我使用4个线程下载4个图片后,再用一个线程去合成可以吗?这样就是 4 + 1 个线程,如何同步呢?特别是合成的线程,要等待多个事件?
或者4个线程下载后,再发消息给UI线程去合成(当然,要判断一下4个都下好了再合成),哪个比较好了
10 个解决方案
#1
线程共享进程的数据
#2
共用一份代码,局部变量分开
#3
每个线程有自己的栈空间
堆空间是共享的,但不会冲突
堆空间是共享的,但不会冲突
#4
如果你的4个工作现场不设计到操作公共缓冲区(读写,至少有个线程需要写缓冲区数据),则不需要考虑同步
#5
用WaitForMultipleObjects等待四个线程全部结束
#6
WaitForMultipleObjects
#7
UI线程中WaitForMultipleObjects等待四个子线程完成后再合成
#8
没错,比如下载软件128个线程,都是独立的。
#9
兄弟你刚回答了我一个问题,我也来回答你问题
其实函数永远只有一份,唯一变的是局部变量,比如递归
你这个问题不需要同步,直接一次性分配所有空间,然后给每个线程分配一个空间,下载下来以后就写入各自分配缓冲区就是了,当最后一个线程执行结束,整个数据就接收OK了。
如果还有问题,给我发消息
其实函数永远只有一份,唯一变的是局部变量,比如递归
你这个问题不需要同步,直接一次性分配所有空间,然后给每个线程分配一个空间,下载下来以后就写入各自分配缓冲区就是了,当最后一个线程执行结束,整个数据就接收OK了。
如果还有问题,给我发消息
#10
局部变量不共享,全局、静态变量共享,注意全局、静态变量使用时线程同步就行了
#1
线程共享进程的数据
#2
共用一份代码,局部变量分开
#3
每个线程有自己的栈空间
堆空间是共享的,但不会冲突
堆空间是共享的,但不会冲突
#4
如果你的4个工作现场不设计到操作公共缓冲区(读写,至少有个线程需要写缓冲区数据),则不需要考虑同步
#5
用WaitForMultipleObjects等待四个线程全部结束
#6
WaitForMultipleObjects
#7
UI线程中WaitForMultipleObjects等待四个子线程完成后再合成
#8
没错,比如下载软件128个线程,都是独立的。
#9
兄弟你刚回答了我一个问题,我也来回答你问题
其实函数永远只有一份,唯一变的是局部变量,比如递归
你这个问题不需要同步,直接一次性分配所有空间,然后给每个线程分配一个空间,下载下来以后就写入各自分配缓冲区就是了,当最后一个线程执行结束,整个数据就接收OK了。
如果还有问题,给我发消息
其实函数永远只有一份,唯一变的是局部变量,比如递归
你这个问题不需要同步,直接一次性分配所有空间,然后给每个线程分配一个空间,下载下来以后就写入各自分配缓冲区就是了,当最后一个线程执行结束,整个数据就接收OK了。
如果还有问题,给我发消息
#10
局部变量不共享,全局、静态变量共享,注意全局、静态变量使用时线程同步就行了