1.说明
Poco库Event类可以用作线程间的超时判断,linux下内部实现基于线程锁和条件变量机制。
2.代码
#include <iostream>
#include "Poco/Thread.h"
#include "Poco/Runnable.h"
#include "Poco/Event.h"
Poco::Event gEVENT;
class SimpleClassOfSetEvent : public Poco::Runnable
{
public:
void run()
{
Poco::Thread::sleep(2000); /// 2s
std::cout<<"Set Event Succeed."<<std::endl;
gEVENT.set();
}
};
class SimpleClassOfWaitEvent : public Poco::Runnable
{
public:
void run()
{
if(gEVENT.tryWait(4000)) /// 4s
{
std::cout<<"Wait Event Success."<<std::endl;
}
else
{
std::cout<<"Time Out."<<std::endl;
}
}
};
int main()
{
/// SimpleClassOfSetEvent类完成消息的set操作逻辑实现,延时2秒执行
SimpleClassOfSetEvent cSetEvent;
/// SimpleClassOfWaitEvent类完成消息的wait操作逻辑实现,超时时间4秒
SimpleClassOfWaitEvent cWaitEvent;
Poco::Thread cFirstThread;
Poco::Thread cSecondThread;
/// 启动线程
cFirstThread.start(cSetEvent);
cSecondThread.start(cWaitEvent);
/// 等待线程
cFirstThread.join();
cSecondThread.join();
/// set消息线程在4s超时时间内完成了消息的设定,所以wait消息线程tryWait()判断未超时。
/// 例子中gEVENT设定为全局变量只是为了Poco::Event使用方法的简单展示,真实应用场景一般不会这样使用。
/// 输出:
/// Set Event Succeed.
/// Wait Event Success.
return 0;
}