• 4198阅读
  • 4回复

Qt多线程问题 [复制链接]

上一主题 下一主题
 
只看楼主 倒序阅读 楼主  发表于: 2013-05-07
我对于多线程中有个问题不太理解,求教高人解释,谢谢了
int main()
{
       Producer producer;
       Consumer consumer;
       producer.start();
       consumer.start();
       producer.wait();
       consumer.wait();
}
这里面有两个线程producer和consumer,这两个线程的run函数都没有加QMutex或其他同步类
这个执行顺序是先执行完producer中的run函数,然后再执行consumer中的run函数吗?
也就是说顺序执行
只看该作者 1楼 发表于: 2013-05-07
我自己写了个小程序,做测试用,
我发现只要这个run中有延迟程序,则会暂停使用该线程,转向另外一个线程
我现在想输出结果为:
First1
Second1
Third1
First2
Second2
Third2
这个里面该如何加线程同步来控制?
---------------------------------------------------
#include <QThread>
#include <QString>
#include <QMutex>
#include <stdio.h>

QMutex mutex;

class MyThread1:public QThread
{
    public:
        virtual void run();
};
void MyThread1::run()
{
    qDebug("First1");
//    usleep(500000);
    qDebug("First2");
    
}


class MyThread2:public QThread
{
    public:
        virtual void run();
};
void MyThread2::run()
{

    qDebug("Second1");
    usleep(500000);
    qDebug("Second2");

}
class MyThread3:public QThread
{
    public:
        virtual void run();
};
void MyThread3::run()
{

    qDebug("Third1");
//    usleep(500000);
    qDebug("Third2");

}

int main()
{
    MyThread1 a;
    MyThread2 b;
    MyThread3 c;
    
    a.start();
    b.start();
    c.start();

    a.wait();
    b.wait();
    c.wait();
}
离线ffii4455

只看该作者 2楼 发表于: 2013-05-07
第一个问题:
线程的执行顺序本来就是未知的。。。run中代码将在新线程中执行。两个线程的run是交替进行的,顺序未知。
第二个问题:
与其想费尽力气让多线程顺序执行,还不如直接单线程。
只看该作者 3楼 发表于: 2013-05-07
明白了,多谢
离线圣域天子

只看该作者 4楼 发表于: 2013-05-07
引用第2楼ffii4455于2013-05-07 10:13发表的  :
第一个问题:
线程的执行顺序本来就是未知的。。。run中代码将在新线程中执行。两个线程的run是交替进行的,顺序未知。
第二个问题:
与其想费尽力气让多线程顺序执行,还不如直接单线程。

有的时候会有这样的需求的,一般使用计数器判断执行的次数,并根据次数当后面执行的线程先 sleep ...
快速回复
限100 字节
 
上一个 下一个