Poco::Event

来源:互联网 发布:java点击按钮触发事件 编辑:程序博客网 时间:2024/06/05 11:50

Poco::Event是用于多线程之间的同步,其wait调用会阻塞一个线程的执行,当其他线程对此事件set操作后,此线程会继续运行。事件有两种,一种是自动复位,另一种是手动复位。

Event类

默认构造函数是自动复位,wait用于阻塞一个线程,set后,wait返回;自动复位中,不需要reset。

自动复位状态图

自动复位中,当多个线程阻塞在同一个Event时,只有一个可以返回,其他的,继续阻塞。

手动复位状态图

手动复位中,当set了,阻塞于这个Event的所有线程都可以再继续运行,并且可以多次通过这个Event的wait调用。直到reset为止。

demo

#include "Poco/Event.h"#include "Poco/Thread.h"using Poco::Event;using Poco::Thread;class EventRunnable:public Runnable{public:    EventRunnable(Event& ea,Event& eh):m_EventAuto(ea),m_EventHandle(eh) {  }    void run()    {        std::cout << "Enter Thread." << std::endl;        m_EventAuto.wait();        std::cout << "Through wait 1." << std::endl;        m_EventAuto.wait();        std::cout << "Through wait 2." << std::endl;        m_EventHandle.wait();        m_EventHandle.wait();        std::cout << "Through wait 3." << std::endl;    }private:    Event& m_EventAuto;    Event& m_EventHandle;};int main(){    Event ea;    Event eh(false);    EventRunnable r(ea,eh);    Thread t;    t.start(r);    Thread::sleep(200);    ea.set();    Thread::sleep(200);    ea.set();    Thread::sleep(200);    eh.set();    t.join();    return 0;}




原创粉丝点击