• 8636阅读
  • 6回复

[提问]两个线程使用QMutex,该在哪里声明QMutex对象呢[已经解决] [复制链接]

上一主题 下一主题
离线gjf123
 

只看楼主 倒序阅读 楼主  发表于: 2011-08-01
各位大侠,小弟写了两个线程,并在run方法里写如下内容
test_thread.cpp

void test_thread::run()
{
    forever
    {
        my_mutex.lock();
        printf("1111111111111111111\r\n");
        sleep(2);
        printf("1111111111111111111\r\n");
        my_mutex.unlock();
    }
}


test1_thread.cpp
void test1_thread::run()
{
    forever
    {
        my_mutex.lock();
        printf("222222222222222222\r\n");
        sleep(2);
        printf("222222222222222222\r\n");
        my_mutex.unlock();
    }
}
问题:那这个my_mutex变量声明QMutex my_mutex;应该放在哪里
test_thread.cpp   test1_thread.cpp  里才能共用my_mutex这个变量呢???????

离线jdwx

只看该作者 1楼 发表于: 2011-08-01
回 楼主(gjf123) 的帖子
可以用全局变量,当然尽量不用。
还可以从QThread先public一个类,添加一个静态变量QMutex。
再从这个类再public出两个test类,这个方法其实也是变相使用全局变量。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线gjf123

只看该作者 2楼 发表于: 2011-08-02
谢谢jdwx 大侠,还有点问题:
您的第一种全局变量方法,我试过即在test_thread.cpp中QMutex my_mutex;
在test_thread.cpp中extern QMutex my_mutex;   但有时候运行时会出问题即
一直打印1111111111111111111  或一直打印222222222222222222
而不会正常间隔打印。

想问jdwx 大侠的是为什么尽量不用全局变量呢??期盼回复,感激不尽
离线gjf123

只看该作者 3楼 发表于: 2011-08-02
Re:jdwx 大侠
小弟按您的第二种方法:
先定义继承自QThread 的my_thread

class my_thread:public QThread {
    Q_OBJECT
public:
    my_thread(QWidget *);
    ~my_thread();
    static QMutex my_mutex;
};

class test_thread : public my_thread
{
}


class test1_thread : public my_thread
{
}

test_thread.cpp
void test_thread::run()
{
    forever
    {
        my_thread::my_mutex.lock();
        printf("1111111111111111111\r\n");
        sleep(2);
        printf("1111111111111111111\r\n");
        my_thread::my_mutex.unlock();
    }
}


test1_thread.cpp
void test1_thread::run()
{
    forever
    {
        my_thread::my_mutex.lock();
        printf("222222222222222222\r\n");
        sleep(2);
        printf("222222222222222222\r\n");
        my_thread::my_mutex.unlock();
    }
}
编译不通过报错,test_thread.cpp::-1: error: undefined reference to `my_thread::my_mutex'
test1_thread.cpp::-1: error: undefined reference to `my_thread::my_mutex'请教jdwx 大侠!!!

离线gjf123

只看该作者 4楼 发表于: 2011-08-02
谢谢jdwx 大侠不吝赐教,问题已经解决
离线liu_xf
只看该作者 5楼 发表于: 2011-08-15
问题解决了,是不是应该说一下
离线fennangshgc
只看该作者 6楼 发表于: 2011-08-15
不错
快速回复
限100 字节
 
上一个 下一个