如何检查我所使用的线程是否是Unity线程?
我尝试在构造函数时捕获threadId,但是在程序生命周期的某个地方,threadId会移动。
在我的项目中,一些辅助线程进程需要访问新创建的对象
我使用生产者 - 消费者模式,因此可以在Unity线程上创建它们。
对象工厂对请求进行排队,并在Update()
上将我请求的对象在正确的线程上实例化。在Queued和Instantiated之间,工厂方法使用AutoResetEvent等待ObjectCreated事件。
现在有时这个工厂将从主线程调用,AutoResetEvent将阻塞自己的线程。 我也用
的方式尝试了它// First try on this thread
try
{
return action();
}
catch (ArgumentException ex)
{
Debug.Log("Tried on same thread, but failed. "+ex.Message);
}
PushToQueueAndWait(action);
但是当团结抛出异常时,程序会停止。
如果我能检查我是否在正确的线程上,我可以在排队和执行之间切换。
答案 0 :(得分:13)
我通过捕获整个线程然后等同于它来解决它:
public void Start(){
mainThread = System.Threading.Thread.CurrentThread;
}
bool isMainThread(){
return mainThread.Equals(System.Threading.Thread.CurrentThread);
}
相关:http://answers.unity3d.com/questions/62631/i-wonder-about-thread-id-plz-answer-me.html