我正在编写一个使用libev来等待许多文件描述符的程序。当数据传入时,将运行vulkan计算着色器来处理数据。该着色器的完成使用围栏发出信号。我不想阻塞我的事件循环来等待完成返回结果。
我最初尝试使用VkGetFenceFdKHR获取文件描述符,并在栅栏上设置VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT以获取同步文件,但我针对的其中一台计算机不支持该功能。
目前,我只是使用计时器和vkGetFenceStatus来轮询栅栏,但这感觉非常低效。有没有更好的方法来唤醒我的事件循环?
发布于 2021-04-30 23:55:52
我不知道这是不是更好的方法,因为我没有基于文件描述符的同步的实际经验。但这里有一个替代方案。
您可以创建一个线程,它的唯一目的是在栅栏上阻塞,之后它将发出FD信号。这在某些方面可能比您的计时器和轮询API更好,因为它不会浪费CPU周期。但它确实需要额外的线程唤醒,然后等待FD的线程才能看到它,因此这可能会延迟响应。
https://stackoverflow.com/questions/67316264
复制相似问题