【发布时间】:2020-05-23 22:50:46
【问题描述】:
所以我有一个游戏对象,它包含一个 A 类(扩展单一行为),它包含(创建)一个 B 类(没有单一行为)。此类 B 生成一个线程,其中包含一个 while (true) 循环,该循环执行一些工作。
我的问题是……
当这个 GameObject 被释放/销毁时,我假设其中包含的类 B 也被破坏了。当这个B类被破坏时,这个无限循环线程是否也终止了?
【问题讨论】:
-
仅当 Dispose 取消它时。因此,您永远不应该编写无限循环。始终让它使用变量或其他方法来允许取消。
-
所以我需要重写 dispose 并设置该变量?或者这会在析构函数(~)中工作吗?
-
我会把它放在 Dispose 中。毕竟,这样的清理就是它的用途。但实际上编写一个合适的 Dispose 并不是那么容易。没关系不小心吞下异常的问题。你如何取消它,实际上取决于你一开始是如何开始的。有几种方法可以给特定的猫科动物剥皮。 |你有多确定,你需要一个线程?工作 CPU 是否受限?如果没有,简单的异步也可以正常工作。
-
我像 new Thread(myfunc).Start() 一样启动了线程。这完全是一个仅受 CPU 限制的路径查找计算,不依赖于 Unity 特定对象。然而;它不是一个完全的自旋锁。即使我有一段时间(真的)..我也使用信号量来阻止大部分时间。然而;因为它没有从 MonoBehaviour 扩展,我什至可以覆盖 Dispose 吗?
-
每个类都可以实现 IDisposeable。它是一个 .NET 甚至是 GarbageCollection 功能,而不是 Unity 或 Mono 的特殊功能。 Monobehavior 是一个 asbract 基类。而他们经常做的一件事就是“收集界面”。
标签: c# multithreading class unity3d