线程创建事件 (红绿灯)

import threading
import time

event=threading.Event()

def light():
    count=0
    while True:
        if count<=5:
            event.set()
            print('\033[42;1m--green light on---\033[0m')

        elif 5<count<=10:
            event.clear()
            print('\033[43;1m--yellow light on---\033[0m')
        else:
            event.clear()
            print('\033[41;1m--red light on---\033[0m')
            if count>=15:
                count=0
        time.sleep(1)
        count+=1

def car(name):
    while True:
        if event.is_set():
            print("%s running..." % name)
            time.sleep(1)
        else:
            print("car is waiting...")
            event.wait()
            
Light=threading.Thread(target=light,)
Light.start()
Car=threading.Thread(target=car,args=("Benz",))
Car.start()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VERLRE是一种常见的多线程同步机制,可以用于实现红绿灯的控制,下面是一个简单的红绿灯控制代码示例: ```cpp #include <QtCore/QCoreApplication> #include <QtCore/QThread> #include <QtCore/QDebug> // 定义红绿灯状态枚举 enum TrafficLightStatus { Red, Green, Yellow }; // 定义红绿灯控制类 class TrafficLightController : public QObject { Q_OBJECT public: TrafficLightController(QObject *parent = nullptr) : QObject(parent) {} // 开始控制红绿灯 void start() { // 创建红绿灯线程 QThread *thread = new QThread(this); thread->start(); // 将红绿灯状态切换函数移动到红绿灯线程中执行 moveToThread(thread); // 开始控制红绿灯 QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &TrafficLightController::switchStatus); timer->start(5000); // 每5秒切换一次状态 } signals: // 发送红绿灯状态信号 void statusChanged(TrafficLightStatus status); private: // 切换红绿灯状态 void switchStatus() { static TrafficLightStatus status = Red; switch (status) { case Red: status = Green; emit statusChanged(Green); break; case Green: status = Yellow; emit statusChanged(Yellow); break; case Yellow: status = Red; emit statusChanged(Red); break; } } }; // 定义车辆类 class Car : public QObject { Q_OBJECT public: Car(QObject *parent = nullptr) : QObject(parent) {} // 开始行驶 void start() { // 创建车辆线程 QThread *thread = new QThread(this); thread->start(); // 将车辆行驶函数移动到车辆线程中执行 moveToThread(thread); // 开始行驶 QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &Car::drive); timer->start(1000); // 每1秒行驶一次 } signals: // 发送车辆状态信号 void statusChanged(QString status); private: // 车辆行驶函数 void drive() { // 判断当前红绿灯状态 TrafficLightStatus status = static_cast<TrafficLightStatus>(qrand() % 3); switch (status) { case Red: emit statusChanged("等待红灯"); break; case Green: emit statusChanged("通过绿灯"); break; case Yellow: emit statusChanged("等待黄灯"); break; } } }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 创建红绿灯控制器和车辆对象 TrafficLightController trafficLight; Car car; // 连接红绿灯状态信号和车辆状态信号 QObject::connect(&trafficLight, &TrafficLightController::statusChanged, &car, &Car::statusChanged); // 开始控制红绿灯和车辆行驶 trafficLight.start(); car.start(); return a.exec(); } ``` 该代码使用了Qt的多线程机制和定时器功能,实现了一个简单的红绿灯控制程序。红绿灯控制器类中使用了VERLRE同步机制,通过切换红绿灯状态来控制车辆的行驶。车辆类中根据当前红绿灯状态来判断车辆的行驶状态,并发送状态信号。在main函数中,将红绿灯状态信号和车辆状态信号连接起来,实现了红绿灯和车辆的同步控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值