C ++访问另一个类的数据成员

时间:2013-09-29 23:33:39

标签: c++ multithreading qt counter qthread

我正在使用Qt创建一个简单的多线程应用程序,我想从线程类(QThread)中打印我从函数创建的线程数。

例如,如果我创建3个T类线程,函数T.printcount应打印出“3个线程处于活动状态”。

我假设我会在T类(可能是主线程)之外创建一个变量,并从线程类进行访问。我该怎么办?

在T类中创建虚拟静态变量并访问它是否更好?

其他想法?

2 个答案:

答案 0 :(得分:1)

引用:如果我创建3个T类线程,函数T.printcount应打印出“3个线程处于活动状态”。

在这种情况下,最好在类中创建一个静态变量,然后在每次创建对象时更新它。 您可以在不需要函数btw的情况下访问静态变量。

类似于:ClassName :: StaticVariable

如果您要通过函数打印类的静态变量,请不要忘记将该函数设置为静态。

答案 1 :(得分:1)

由于名为queued connections的机制,可以安全地连接不同线程上的信号和插槽。因此,一个选项可能是连接线程中的信号

signals:

    void threadCreated();

来自主线程的某个对象,即类ThreadCounter的一个实例:

class ThreadCounter : public QObject
{
    Q_OBJECT
    int count;

public slots:
    void increaseCountVariable() {
        count++;
    }
//...
};

并连接它们:

connect(myThread, &MyThread::threadCreated, myThreadCounter,
                    &ThreadCounter::increaseCountVariable);

来自Qt pages

  

重要的是要记住QThread对象通常存在于   创建它的线程,而不是它管理的线程。注意:如果您使用除排队信号/插槽连接之外的任何技术(例如直接函数调用)与对象进行交互,则需要采取通常的多线程预防措施。