如何在等待程序启动混乱/GTK +时制作加载/介绍动画弹出窗口

Posted

技术标签:

【中文标题】如何在等待程序启动混乱/GTK +时制作加载/介绍动画弹出窗口【英文标题】:How to make a loading/intro animation popup while waiting for program to start up clutter/GTK+ 【发布时间】:2012-04-11 23:08:22 【问题描述】:

我的程序需要几秒钟才能启动。我正在为 GUI 使用混乱,我决定尝试弹出一些东西来表明程序正在启动。我只想让徽标弹出并旋转,然后在程序启动时消失。

所以在混乱中,我想我可以在主函数的第一部分创建一个新舞台(窗口)添加一个演员,让演员旋转。该窗口将立即弹出,但没有内容,但在您启动混乱主循环之前不会显示内容。

所以我只是想知道如何使用 clutter 或 GTK+ 来实现这一点。

如果你熟悉 reaper 4,录音程序,这个程序做的事情类似于我想做的事情。

【问题讨论】:

【参考方案1】:

您想要的称为启动画面。我不熟悉混乱,但我发现了这个GTK splash screen example。

但是,我认为您以错误的方式处理问题。启动画面不是一个好主意,因为您只是增加了开销。你需要的是通过做一些 CPU 和/或 IO 分析来提高你的启动性能。按需加载内容,而不是一次加载会有帮助。

【讨论】:

启动画面不是一个坏主意。如果您有一个繁重的应用程序需要在完成任何操作之前进行大量加载和初始化,那么最好表明计算机很忙。结果可能是用户启动应用程序两次,因为加载需要很长时间,这被误认为根本没有加载。 我不同意。相反,您应该努力尽快显示您的用户界面,并在后台或按需加载任何繁重的内容。 你不能不同意。启动画面对于繁重的应用程序是一个好主意。如果您启动 Windows,您想看一个空白屏幕 20 秒,还是看一个显示它正在加载并因此需要 20.1 秒的动画? Adobe 软件包,同样的,它们都有闪屏。否则你不会知道它正在加载或工作,你最终会按两次。 我可以不同意,这就是我所做的。并且不要将启动操作系统与启动应用程序进行比较。顺便说一句,一个好的桌面环境可以防止你错误地运行同一个应用程序两次,至少,这是我通过运行 GNOME 3 得到的东西之一。我不反对有一些视觉反馈显示你的应用程序正在加载(通常,一个使用了忙碌的鼠标光标),但这不一定是启动画面。 有时,是的,如果您的应用需要大量时间,则可能需要启动画面。如果初始屏幕添加一些关于正在加载的信息,这甚至可能是一个好主意,这有助于识别长时间加载的罪魁祸首,但大多数情况下,您应该花时间简化加载,而不是给 CPU 增加额外的工作.在大多数应用程序上,考虑按需加载会减少额外的时间,并使启动画面变得无关紧要。启动画面只会让缓慢的事情变慢。【参考方案2】:

很遗憾,我不熟悉 Clutter。但我很确定如果没有在任何高级库中运行的主循环,将很难渲染动画。 我会尝试将导致延迟的代码放入单独的线程中,并在启动完成时通知主循环。

【讨论】:

我正在尝试一种新方法,只是制作一个单独的程序以在启动时启动。但是我想不出在主程序启动时关闭介绍程序的最佳方法。 您正在为哪个平台开发。还是您的程序是独立于平台的? 它是跨平台的。现在我正在 Linux 上开发它。【参考方案3】:

我用的是这样的东西:

string splashfile = path_templ + "/splashimg.png";

GtkWidget *image=gtk_image_new_from_file(splashfile.c_str());
gtk_container_add(GTK_CONTAINER(SplashWindow), image);


gtk_widget_show_all(SplashWindow);

//Cycle through all iterations (refresh everything in the GUI)
while (gtk_events_pending())
    gtk_main_iteration();

sleep(1);

(... rest of code ...)

gtk_main ();
gdk_threads_leave ();

尤其是等待事件的最后一部分是关键

【讨论】:

以上是关于如何在等待程序启动混乱/GTK +时制作加载/介绍动画弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Java 线程等待另一个线程的输出?

如何在开始和测试期间使用 Appium“等待活动”?

如何让线程等待 JFrame 在 Java 中关闭?

如何强制 Crashlytics 上传报告并等待

如何实现在运行shell程序时添加选项-h能提示程序的用法?

如何在 Windows 启动时运行 C# 应用程序?