提问者:小点点

在Linux中替换Windows特定的句柄,事件创建和同步API


我有以下一组特定于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的情况下编写相同的代码集?


共1个答案

匿名用户

CreateEvent的替换是eventfd,您可能需要efd_cloexecefd_nonblock标志。 除非你知道你在做什么,否则不要使用信号标志。

WaitForMultipleObjects的替换是poll,请在请求的事件中指定pollin标志。 请记住,事件不会被轮询重置,它将保持信号状态。 从eventfd句柄读取8字节以复位。 该功能与Windows上的手动重置事件相同。

要发出事件信号,请在eventfd句柄上调用write,传递值为1的本地UINT64_T变量的地址。

要在不再需要事件时销毁它们,只需调用Close即可。