Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我的C++;Unity插件在编辑器中运行一次,但不会运行两次 我有一个调用C++代码的插件。当游戏开始时,它调用这个代码>外部> /COD> C++函数: void startPlugin() { MyClass::instance = new MyClass(); MyClass::instance->process(); }_C++_Multithreading_Unity3d_Pinvoke - Fatal编程技术网

我的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++内部没有线程被调用,但是在进程方法的结尾,我仍然需要调用<代码> pthRead退出(this)。这在Windows上不是必需的,但在Mac上是必需的。在那之后,一切正常

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