下面是一个使用Qt C++创建两个线程A和线程B,并实现来回切换的示例代码:
#include <QCoreApplication>
#include <QThread>
// 自定义线程A类
class ThreadA : public QThread
{
public:
void run() override {
while (true) {
qDebug("Thread A is running...");
msleep(1000); // 暂停1秒
// 挂起自己,让线程B运行
mutex.lock();
condition.wait(&mutex);
mutex.unlock();
}
}
};
// 自定义线程B类
class ThreadB : public QThread
{
public:
void run() override {
while (true) {
qDebug("Thread B is running...");
msleep(1000); // 暂停1秒
// 挂起自己,让线程A运行
mutex.lock();
condition.wait(&mutex);
mutex.unlock();
}
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
ThreadA threadA;
ThreadB threadB;
// 启动线程A和线程B
threadA.start();
threadB.start();
while (true) {
// 主线程每隔2秒发出唤醒信号,切换到另一个线程运行
QThread::sleep(2);
if (threadA.isRunning()) {
qDebug("Wake up Thread A!");
threadA.mutex.lock();
threadA.condition.wakeAll(); // 唤醒线程A
threadA.mutex.unlock();
} else if (threadB.isRunning()) {
qDebug("Wake up Thread B!");
threadB.mutex.lock();
threadB.condition.wakeAll(); // 唤醒线程B
threadB.mutex.unlock();
}
}
return a.exec();
}
这个示例使用了QThread
类创建了两个自定义线程类ThreadA
和ThreadB
,分别实现了各自的运行逻辑。在主函数中,首先启动了这两个线程,并通过定时器方式定期发送唤醒信号,来回切换线程的运行。
请注意,在上述代码中使用了互斥锁(QMutex
)和条件变量(QWaitCondition
)来控制线程间的挂起与唤醒操作。
内容由零声教学AI助手提供,问题来源于学员提问