gpt4 book ai didi

gtk - 有哪些学习使用 GTK 的 pthread 的好资源?

转载 作者:行者123 更新时间:2023-12-02 19:47:59 24 4
gpt4 key购买 nike

所以,正如 children 所说,我是一个菜鸟。我在大学学习了 CS 1 和 2,(如果我没记错的话)我们学到了递归、链表、二叉树等。没有涉及 GUI 编程或多线程。

所以,现在我正在尝试学习 C,并且我有一个想法,我想编写一个平台风格的游戏作为目标。我还有很长的路要走,但是,嘿,有一些值得追求的东西是件好事。

所以,问题基本上是这样的:我的理解是 GTK 是事件驱动的,它位于 gtk_main() 中并等待用户执行操作,然后使用回调函数处理事件(也许这是一个简单的理解,但这在我看来是有道理的,而且我已经能够用图形界面编写一些简单的程序了)。无论如何,在平台式游戏中,即使用户没有按下按键或鼠标按钮,也需要发生一些事情。所以我的想法是,你仍然可以让 gtk_main() 等待输入事件并处理它们,然后另一个线程让程序在 GTK 等待用户时执行视频游戏的操作。换句话说,无论马里奥是否移动,大金刚仍然需要扔木桶。

这个网站上的一个类似问题让我想到了this tutorial关于多线程,但我想知道是否有任何特定于将其与 GTK 一起应用的信息。我的 Google-fu 可能很弱,但互联网上似乎没有太多信息,而且我发现的少量信息听起来混合线程和 GTK 可能有点危险。

感谢您的帮助!

最佳答案

我相信您误解了需要多线程的情况。 GTK 的事件循环可以完美地为平台游戏提供服务,因为您的回调不仅会在输入事件上调用,还会在 also on timeouts 上调用。 。此功能允许实现动画,因为您可以安排 Mario 每秒移动几次,无论用户是否按下按键。

换句话说,只要您的回调在绘制下一帧之前返回,您的游戏就永远不会错过任何一个节拍,而这一切都无需使用线程。许多看起来响应完美的应用程序和游戏其核心都是单线程的,或者仅将线程用于专门的任务。

多线程对于 GUI 工具包来说很复杂,需要经验丰富的专业程序员才能正确处理。由于各种技术原因,您必须从同一线程访问该工具包。这是explained in the documentation ,以及其他一些血淋淋的细节。如果是这样的话,为什么这么多程序都吹嘘多线程,什么时候需要它?有几种情况需要 GUI 应用程序中的多线程:

  1. 充分利用多核 CPU 的能力。单线程模型总共只能使用一个CPU,而当前系统的CPU数量往往越来越多。

    理想情况下,您应该拥有一个线程池,其中的线程数量与系统上的核心数量相同。当需要进行 CPU 密集型计算时,请求会被推送到与线程池关联的队列,由池中的第一个空闲线程获取。每当计算完成时,GUI 事件循环都会收到通知,以便它可以显示结果。

  2. 为了防止“GUI 缓慢”综合症,即执行缓慢的回调导致 GUI 无响应。

    许多旨在“立即​​”返回主循环之前执行“快速任务”的回调最终会花费比预期更长的时间,原因是程序员无法预料的。例如,原来由十几条记录组成的数据集增长到十万条记录。或者,需要解析的小 XML 文件最终会存储在需要永远访问的网络磁盘上。

    防止 GUI 迟缓的架构与第 1 点中描述的架构非常相似,除了这里线程数可以超过核心数,并且所有重要任务都被认为是值得的移交给单独的线程。具体来说,事件分派(dispatch)线程不执行重要的处理 - 它只执行接收事件并将其分派(dispatch)到执行实际工作的其他线程所需的最少量代码。

关于gtk - 有哪些学习使用 GTK 的 pthread 的好资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16009004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com