QThread之简单并行

来源:互联网 发布:网游自动挂机软件 编辑:程序博客网 时间:2024/05/16 14:17

1.这个好理解,使用线程池来并发运行我们的任务,具体的可以看官方的doc

2.这里我们以一个不返回值的并发操作为例,如果有返回值就需要处理结果的合并计算,具体可以参考doc,这些操作随着计算机的发达,数据处理的需求其社会的需求量会更加突出,例如akka,scala以及各种云计算均使用了这个功能

 

3.

 

源码贴出:

http://download.csdn.net/detail/u013571243/9200059

 

4.并行的函数

void box::spin(int& data){    const int work = 1000 * 1000 * 40;    volatile int v = 0;    qDebug() << "iteration" << data << "start   thread" << QThread::currentThreadId();    for (int j = 0; j < work; ++j)++v;    qDebug() << "iteration" << data << "finish  thread" << QThread::currentThreadId();}


我们在这里需要明白的是该函数是被执行了n次(数目自已设定),而每次使用

for (int j = 0; j < work; ++j)++v;

进行模拟处理数据,所以

qDebug() << "iteration" << data << "start   thread" << QThread::currentThreadId();

是同一时间被执行的,然而他并不是我们实际调用spin的数目,原因刚才说过了,他是使用线程池处理我们的数据的,默认情况下是2个,也就是线程A执行该spin函数后被放回线程池中

 

例如我们有个任务需要分成10份额完成,利用2个线程处理,开始时Qt会去寻找目前可用的线程为2个,2个全部取出来运行其中的两个小任务,一旦其中一个任务完成则该线程被放回线程池,此时Qt被通知又有线程可以用了,Qt又会去查找是否还有任务,此时又发现还有8个任务,于是.......

 

 

 

 

 



 

 

0 0
原创粉丝点击