我正在为Windows编写一个代码(由我编写)到其他平台。
我有一个用于单线程协作式多任务的通用基础架构,我尝试使用POSIX API使其工作。此基础结构允许等待任何指定的“事件”并适当地处理它们中的任何一个。这些“事件”包括网络(套接字),定时器和应用程序本身从另一个线程引起的事情,例如关于应在此线程中执行的排队工作项的“事件”,中止请求等。
在Windows中,自然的方法是使用“等待句柄”(事件,信号量等)和WaitForMultipleObjects
或等效的等待函数。套接字也可以与事件相关联(WSAEventSelect
)。
我想知道如何使用POSIX实现这一目标。我需要的是一种等待函数,可以给出多个等待的事件/条件,包括超时。
由于我需要(除其他外)套接字,我决定从文件/套接字特定的等待函数开始,例如select
,poll
,epoll
。这可以解决问题。
现在我想知道如何添加“内部”事件。我想到的一个解决方案是通过socketpair
为此创建“人工”套接字,然后发送“虚拟数据”以在目标线程中引发事件。
有什么想法吗?