GLUT:任何添加“文件可读”的方法 挂钩到事件循环?

发布于 2024-07-06 05:15:16 字数 110 浏览 11 评论 0原文

我想打开一个套接字并在 GLUT 事件循环上挂起一个可读事件...关于如何执行此操作有什么想法吗? 可移植的标准 GLUT 代码是最好的,但我也愿意接受特定于平台的黑客攻击。

谢谢!

I'd like to open a socket and hang a readable event on the GLUT event loop... any ideas on how to do this? Portable standard GLUT code is best, but I'm open to platform-specific hacks as well.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦幻的心爱 2024-07-13 05:15:16

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 网络指南

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

GLUT doesn't support this very well. See GLUT FAQ #18

You could register an idle function with glutIdleFunc, and in the idle function poll your socket to see if there's new data available. In order to avoid blocking when you read from your socket, you need to set your socket to be non-blocking by calling:

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

(Taken from Beej's Guide to Networking)

The drawback of this approach is that your app will be checking the socket state 60 times a second, rather than just waiting for network data to come in.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文