我正在使用 Qt 创建一个简单的多线程应用程序,并且我想打印我从线程类 (QThread) 中的函数创建的线程数。
例如,如果我创建了 3 个 T 类线程,函数 T.printcount 应该打印出“3 个线程处于活动状态”。
我假设我将在 T 类(可能是主线程)之外创建一个变量,并从线程类进行访问。我该怎么做?
在类 T 中创建一个虚拟静态变量并访问它会更好吗?
其他想法?
我正在使用 Qt 创建一个简单的多线程应用程序,并且我想打印我从线程类 (QThread) 中的函数创建的线程数。
例如,如果我创建了 3 个 T 类线程,函数 T.printcount 应该打印出“3 个线程处于活动状态”。
我假设我将在 T 类(可能是主线程)之外创建一个变量,并从线程类进行访问。我该怎么做?
在类 T 中创建一个虚拟静态变量并访问它会更好吗?
其他想法?
Quote: 如果我创建 3 个 T 类线程,函数 T.printcount 应该打印出“3 个线程处于活动状态”。
在这种情况下,最好在类中创建一个静态变量,然后在每次创建对象时更新它。顺便说一句,您可以访问静态变量而无需函数。
类似于:ClassName::StaticVariable
如果您要通过函数打印类的静态变量,请不要忘记将该函数设为静态。
由于一种称为队列连接的机制,跨不同线程连接信号和槽是安全的。因此,一种选择可能是连接来自线程的信号
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 页面:
重要的是要记住,QThread 对象通常存在于创建它的线程中,而不是它管理的线程中。注意:如果您与对象交互,使用队列信号/槽连接以外的任何技术(例如直接函数调用),则需要采取通常的多线程预防措施。