【问题标题】:Loading screen animation using threads使用线程加载屏幕动画
【发布时间】:2012-02-23 20:57:24
【问题描述】:

我做了一个游戏,它是用 C++ 和 directX 编写的。

当用户选择要播放的任务时,屏幕会在加载所有资源时出现一段时间的空白。所以用户知道游戏没有崩溃我想制作一个带有动画的加载屏幕。

我的问题是这样的:

  1. 如果一个线程(主线程)崩溃,该进程的所有线程都会崩溃吗?

  2. 你能从创建线程的线程中销毁线程,还是线程必须自行终止?

  3. 我是多线程新手,以前没有使用过。很多人说它使程序变得不必要地复杂,那么是否值得让我的程序多线程只是为了加载屏幕,还是有其他方法?

【问题讨论】:

    标签: c++ multithreading loading


    【解决方案1】:

    如果一个线程(主线程)崩溃,该进程的所有线程都会崩溃吗?

    如果主线程(即 UI 线程)崩溃,应用程序显然崩溃了。如果任何工作线程崩溃,您将收到一个可以选择忽略的异常。

    你能从创建它的线程中销毁一个线程,还是线程必须自行终止?

    通常线程本身应该自行终止(即结束执行)。显然,您可以向任何辅助线程发出信号以从主线程停止。

    我是多线程新手,之前没有使用过。很多人说它使程序变得不必要地复杂,那么是否值得让我的程序多线程只是为了加载屏幕,或者有其他方法吗?

    如果你现在对编程很认真,那么你将不得不学习多任务处理。

    【讨论】:

      【解决方案2】:

      如果一个线程(主线程)崩溃,该进程的所有线程都会崩溃吗?

      如果“崩溃”是指未处理的异常被传播到操作系统 - 是的。

      你能从创建它的线程中销毁一个线程,还是线程必须自行终止?

      TerminateThread,但不推荐使用。最好通知线程它应该终止并将实际的清理工作留给线程。

      我是多线程新手,之前没有使用过。很多人说它使程序变得不必要地复杂,那么是否值得让我的程序多线程只是为了加载屏幕,或者有其他方法吗?

      加载屏幕实际上是多线程的一个很好的例子。但是,我不会创建一个额外的线程来呈现您的加载屏幕,而是使用多个线程来流入您的资源。渲染应该由一个线程完成(通常推荐用于所有 DirectX 版本)。

      【讨论】:

      • 如果我使用多个线程在我的资源中进行流式传输,这仍然不会导致屏幕变黑的问题吗?你的意思是在我的主线程处理计算和移动图像时有一个线程不断渲染?
      • 我会让我的主线程在一个紧密的循环中进行渲染,而其他线程会加载资源并在完成后发出信号,在这种情况下主线程会继续前进。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 2010-10-22
      • 2013-05-23
      • 2014-08-01
      相关资源
      最近更新 更多