gpt4 book ai didi

c++ - 使用 QThread 和 QTimer 运行方法

转载 作者:行者123 更新时间:2023-11-28 00:43:01 28 4
gpt4 key购买 nike

嗨,我有一个类,其功能根据 QTimer 运行(例如每 30 毫秒运行一次)

class testclass
{
public slots:
void DoSomthing();

}

testclass::testclass()
{
QTimer *timer = new QTimer();
connect(timer , SIGNAL(timeout()) , this , SLOT(DoSomthing());
timer->start(30);

}

但我希望我的 DoSomthing() 函数在单独的线程中运行,这意味着让 DoSomthing() 在单独的线程中运行并使用计时器控制函数(运行我的每隔一段时间在线程中运行)。

class testclass
{
public slots:
void DoSomthing();
}

testclass::testclass()
{
QThread thread = new QThread ();
connect(thread , SIGNAL(started()) , this , SLOT(DoSomthing());

QTimer *timer = new QTimer();
connect(???, SIGNAL(?????) , ????, SLOT(?????); // how i can continue this code
timer->start(30);
}

我该怎么做?

最佳答案

我推荐使用 QtConcurrent。比直接使用 QThread 省事多了。

#include <QtConcurrent/QtConcurrent>

void SomeClass::timerSlot() {
QtConcurrent::run(this, &SomeClass::SomePrivateMethodToRunInThread);
}

void SomeClass::SomePrivateMethodToRunInThread() {
doSomething();
emit someSlot();
}

如果您仅通过值(或 const 引用)传递一个信号并使用 Qt::AutoConnection(默认值)或 Qt::QueuedConnection< 连接它,则发出信号是线程安全的.

关于c++ - 使用 QThread 和 QTimer 运行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17821854/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com