private void RunEveryTenFrames(Color32[] pixels, int width, int height)
{
var thread = new Thread(() =>
{
Perform super = new HeavyOperation();
if (super != null)
{
Debug.Log("Result: " + super);
ResultHandler.handle(super);
}
});
thread.Start();
}
我在Unity中每10帧运行一次此功能。这是一个坏主意吗。此外,当我尝试在线程中添加thread.Abort()
时,它表示thread
未定义,并且在定义错误之前无法使用局部变量。
答案 0 :(得分:2)
在Unity中每10帧创建一个新线程是个好主意吗?
否即可。 10帧太小,无法重复创建新线程。
每次创建新的Thread
都会导致开销。偶尔做一次也不错。它是每10帧完成的。记住这不是每10秒钟。这是每10帧。
使用ThreadPool
。通过将ThreadPool与ThreadPool.QueueUserWorkItem
一起使用,您将重新使用已存在于系统中的Thread,而不是每次都创建新的。
RunEveryTenFrames
ThreadPool
新功能应该如下所示:
private void RunEveryTenFrames(Color32[] pixels, int width, int height)
{
//Prepare parameter to send to the ThreadPool
Data data = new Data();
data.pixels = pixels;
data.width = width;
data.height = height;
ThreadPool.QueueUserWorkItem(new WaitCallback(ExtractFile), data);
}
private void ExtractFile(object a)
{
//Retrive the parameters
Data data = (Data)a;
Perform super = new HeavyOperation();
if (super != null)
{
Debug.Log("Result: " + super);
ResultHandler.handle(super);
}
}
public struct Data
{
public Color32[] pixels;
public int width;
public int height;
}
我需要调用Unity的API或使用此线程中的Unity API,请参阅我的other帖子或如何操作。