我正在使用Qt创建一个简单的多线程应用程序,我想从线程类(QThread)中打印我从函数创建的线程数。
例如,如果我创建3个T类线程,函数T.printcount应打印出“3个线程处于活动状态”。
我假设我会在T类(可能是主线程)之外创建一个变量,并从线程类进行访问。我该怎么办?
在T类中创建虚拟静态变量并访问它是否更好?
其他想法?
答案 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对象通常存在于 创建它的线程,而不是它管理的线程。注意:如果您使用除排队信号/插槽连接之外的任何技术(例如直接函数调用)与对象进行交互,则需要采取通常的多线程预防措施。