GLUT:有啥方法可以在事件循环中添加“文件可读”挂钩?

Posted

技术标签:

【中文标题】GLUT:有啥方法可以在事件循环中添加“文件可读”挂钩?【英文标题】:GLUT: any way to add a "file readable" hook to the event loop?GLUT:有什么方法可以在事件循环中添加“文件可读”挂钩? 【发布时间】:2008-10-08 21:42:00 【问题描述】:

我想打开一个套接字并在 GLUT 事件循环上挂起一个可读事件......关于如何做到这一点的任何想法?可移植的标准 GLUT 代码是最好的,但我也对特定于平台的 hack 持开放态度。

谢谢!

【问题讨论】:

【参考方案1】:

GLUT 不能很好地支持这一点。见GLUT FAQ #18

您可以使用 glutIdleFunc 注册一个空闲函数,并在空闲函数中轮询您的套接字以查看是否有新数据可用。为了避免从套接字读取时发生阻塞,您需要通过调用将套接字设置为非阻塞:

#include <unistd.h>
#include <fcntl.h>
...
sockfd = socket(PF_INET, SOCK_STREAM, 0);
fcntl(sockfd, F_SETFL, O_NONBLOCK);

(取自Beej's Guide to Networking)

这种方法的缺点是您的应用将每秒检查 60 次套接字状态,而不是仅仅等待网络数据进入。

【讨论】:

您还可以使用 select(2) 函数来测试套接字是否有可用数据。请参阅linux.die.net/man/2/select 的手册页

以上是关于GLUT:有啥方法可以在事件循环中添加“文件可读”挂钩?的主要内容,如果未能解决你的问题,请参考以下文章

GLUT 键盘事件

OpenGL Render Sphere without Glut:这个实现有啥问题?

OpenGL的GLUT事件处理(Event Processing)窗口管理(Window Management)函数[转]

有啥方法可以在不同的行中显示 GridView 的列?

CE 更新事件:有啥方法可以将之前/之后的属性值传递给工作流?

GLUT 叠加层有啥用?