我的C++;Unity插件在编辑器中运行一次,但不会运行两次 我有一个调用C++代码的插件。当游戏开始时,它调用这个代码>外部> /COD> C++函数: void startPlugin() { MyClass::instance = new MyClass(); MyClass::instance->process(); }
我的C++;Unity插件在编辑器中运行一次,但不会运行两次 我有一个调用C++代码的插件。当游戏开始时,它调用这个代码>外部> /COD> C++函数: void startPlugin() { MyClass::instance = new MyClass(); MyClass::instance->process(); },c++,multithreading,unity3d,pinvoke,C++,Multithreading,Unity3d,Pinvoke,process方法运行一个无限循环来处理数据并继续,只要keepRunning成员为true。因为它运行一个无限循环和块,所以这个方法在它自己的线程中被调用 当游戏结束时,我从C#运行这个extern方法: 指的是这种方法: void MyClass::cleanup() { delete instance; instance = NULL; } 根据控制台所说的,这些方法确实在运行 在Mac上,这是第一次起作用。我可以在编辑器中启动游戏,在编辑器中停止游戏,一切正常。但是,如果我尝试
process
方法运行一个无限循环来处理数据并继续,只要keepRunning
成员为true。因为它运行一个无限循环和块,所以这个方法在它自己的线程中被调用
当游戏结束时,我从C#运行这个extern
方法:
指的是这种方法:
void MyClass::cleanup() {
delete instance;
instance = NULL;
}
根据控制台所说的,这些方法确实在运行
在Mac上,这是第一次起作用。我可以在编辑器中启动游戏,在编辑器中停止游戏,一切正常。但是,如果我尝试在不重新启动Unity编辑器的情况下再次运行它,整个编辑器将冻结。有时需要三次而不是两次,但第二次或第三次尝试都会完全冻结团结。光标变为旋转的针轮
日志上写着:
Starting.
(Filename: /Applications/buildAgent/work/d63dfc6385190b60/artifacts/MacEditorGenerated/UnityEngineDebug.cpp Line: 49)
Receiving unhandled NULL exception
Launching bug reporter
Obtained 37 stack frames.
#0 0x00000090019390 in _platform_memmove$VARIANT$sse42
然后堆栈跟踪显示调用extern
函数的函数
尝试加入正在运行的startPlugin
线程会在停止时冻结编辑器。我认为它不应该这样做。毕竟,在那个阶段,循环结束,实例被清理。这不是猜测,有明显的副作用:结束循环会关闭计算机的摄像头,我可以看到摄像头的灯光熄灭。在调用startPlugin
返回后,还会以C#格式发送一条调试消息。因此,毫无疑问,循环已经结束
不删除实例的以前版本每次都在Windows上运行
我是不是做错了什么?我找到了答案
<>虽然在C++内部没有线程被调用,但是在Starting.
(Filename: /Applications/buildAgent/work/d63dfc6385190b60/artifacts/MacEditorGenerated/UnityEngineDebug.cpp Line: 49)
Receiving unhandled NULL exception
Launching bug reporter
Obtained 37 stack frames.
#0 0x00000090019390 in _platform_memmove$VARIANT$sse42