我有以下一组特定于Windows的代码,
//1: Declaring HANDLE
HANDLE *m_handle;
//2: Creating HANDLE instance
int m_Count = 4;
m_handle = new HANDLE[m_Count];
//3: Creating Events
for (int i = 0; i < m_Count ; i++)
{
m_handle [i] = CreateEvent(NULL, FALSE, FALSE, NULL);
}
//4: Synchronous API
DWORD dwEvent = WaitForMultipleObjects(m_Count, m_handle, TRUE, 30000);
//5: Closing the HANDLE
for (int i = 0; i < m_Count; i++)
{
CloseHandle(m_handle[i]);
}
如何在Linux的情况下编写相同的代码集?
CreateEvent的替换是eventfd,您可能需要efd_cloexec
和efd_nonblock
标志。 除非你知道你在做什么,否则不要使用信号标志。
WaitForMultipleObjects的替换是poll,请在请求的事件中指定pollin
标志。 请记住,事件不会被轮询重置,它将保持信号状态。 从eventfd句柄读取8字节以复位。 该功能与Windows上的手动重置事件相同。
要发出事件信号,请在eventfd
句柄上调用write,传递值为1的本地UINT64_T
变量的地址。
要在不再需要事件时销毁它们,只需调用Close即可。