在新托管线程中通过 C# 在混合模式程序集中调用 STL 矢量的push_back
Calling STL vector's push_back in a mixed mode assembly via C# in a new managed thread
我正在编写一个WPF应用程序,它的核心魔力是用本地c++实现的,它被c++/CLI类很好地包装在一个混合模式程序集中。
在c++/CLI包装器类的方法中,我创建了一个向量的新实例并推回一个值:
void Wrapper::CallVectorPushBack()
{
vector<int> foo;
foo.push_back(1);
}
当在应用程序的主线程中运行代码时,这工作得很好。
现在让我们尝试在一个新的托管线程中调用上面的代码:
Task.Factory.StartNew(() => { Wrapper.CallVectorPushBack(); });
为执行上面的代码创建一个新线程时,对vector实例的第一个push_back调用将锁定该线程。新线程卡住了,Visual Studio在线程窗口中将_MtxLock显示为地址。
要使代码运行需要什么?
提前感谢!
干杯!
我找到了问题:
c++/CLI包装器DLL实现了一个DllMain方法,该方法通过注册表库(https://code.google.com/p/cregistry/)读取注册表项。在try catch块中读取不存在的注册表项会破坏上述应用程序的线程功能…
相关文章:
- 在 STL 容器的 STL 容器上调用 clear
- GCC C++ STL 漂亮的打印机 - 手动调用并仅要求大小
- STL 容器在函数中作为模板参数,在调用中出错
- STL 是否有办法在调用小于之前应用函数
- 析构函数在与 STL 的共享指针中调用两次
- 如何在下一次函数调用中使用 STL 映射擦除从最后一个位置
- 为什么此 stl 函数调用会导致不正确的布尔计算
- 调用C 功能,其中包含来自C的STL数据类型
- Cython 带 STL 矢量和没有 NumPy 可以从其他应用程序调用,缺少什么?
- stl 优先级队列中的堆管理是否调用复制构造函数
- 调用 STL 容器的内置函数
- 将类插入 STL 映射时出现"调用没有匹配函数"错误
- 将函子存储在 stl 映射中并调用它们
- 如何将模板对象存储在STL容器和成员功能调用中
- 我是否应该假设对象的析构函数在从 STL 容器中删除后立即调用?
- STL 中构造函数调用的顺序
- 访问嵌套的STL结构和大小调用
- 制作对inner_product(C++STL)的自定义调用
- 为什么在分配时调用默认构造函数的 STL 向量
- STL 容器调用的 Clear() 方法是否删除堆对象