Qt实现类似Python中threading.Event()

文章介绍了如何在Qt中使用QWaitCondition类来实现类似于Pythonthreading.Event的功能,包括wait、set、clear和isSet等方法,用于线程间的同步和通信。QWaitCondition允许线程等待特定条件并能被其他线程唤醒。
摘要由CSDN通过智能技术生成

threading.Event()

通过threading.Event()可以创建一个事件管理标志event = threading.Event();
该标志(event)默认为False,event对象主要有以下4种方法可以调用:

event.wait(timeout=None):调用该方法的线程会被阻塞,如果设置了timeout参数,超出后,线程会停止阻塞继续执行;
event.set():将event的标志设置为True,调用wait方法的所有线程将被唤醒;
event.clear():将event的标志设置为False,调用wait方法的所有线程将被阻塞;
event.isSet():判断event的标志是否为True。

Qt实现threading.Event()相类似方法

使用QWaitCondition类实现。

QWaitCondition类

QWaitCondition类是一个线程同步器件,用于等待特定条件(条件变量)的发生。线程可以在条件变量上等待,直到其他线程发出一个信号通知条件变量的状态发生了变化。其提供如下一些函数:
wait(QMutex *lockedMutex):解锁互斥量lockedMutex,并阻塞等待唤醒条件,被唤醒后锁定lockedMutex并退出函数。
wakeAll():唤醒所有处于等待状态的线程,线程唤醒的顺序不确定,由操作系统的调度策略决定。
wakeOne:唤醒一个处于等待状态的线程,唤醒哪个线程不确定,由操作系统的调度策略决定。

实现threading.Event()

定义Event类
event.h

#ifndef EVENT_H
#define EVENT_H

#include <QWaitCondition>
#include <QMutex>

class Event
{
private:
    QMutex mutex;
    QWaitCondition condition;
    bool state;
    
public:
    Event(bool initialState=false);
    void set();
    void clear();
    bool wait(int timeout=-1);
    bool isSet();
};

#endif // EVENT_H

event.cpp

#include"event.h"

Event::Event(bool initialState)
{
	state = initialState;
}

void Event::set()
{
	mutex.lock();
	state = true;
	condition.wakeAll();
	mutex.unlock();
}

void Event::clear()
{
	mutex.lock();
	state = false;
	mutex.unlock();
}

bool Event::wait(int timeout)
{
	bool result = false;
	mutex.lock();
	if(!state)
	{
		if(timeout < 0)
		{
			condition.wait(&mutex);
			result = true;
		}
		else
		{
			result = condition.wait(&mutex, timeout);
		}
	}
	else
	{
		result = true;
	}
	mutex.unlock;
	return result;
}

bool Event::isSet()
{
	return state;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值