在新的托管线程中通过C#在混合模式程序集中调用STL向量push_back

时间:2014-05-02 12:45:51

标签: c++ multithreading vector stl c++-cli

我正在编写一个WPF应用程序,它在本机C ++中发挥其核心作用,很好地由混合模式程序集中的C ++ / CLI类包装。

在C ++ / CLI包装器类的方法中,我正在创建一个向量的新实例并推回一个值:

void Wrapper::CallVectorPushBack()
{
    vector<int> foo;
    foo.push_back(1);
}

在应用程序的主线程中运行代码时,这样可以正常工作。

现在让我们尝试在C#的新托管线程中调用上面的代码:

Task.Factory.StartNew(() => { Wrapper.CallVectorPushBack(); });

当创建用于执行上述代码的新线程时,向量实例上的第一个push_back调用将锁定该线程。新线程卡住,Visual Studio在“线程”窗口中将_MtxLock显示为地址。

使代码运行需要什么?

提前谢谢!

干杯!

1 个答案:

答案 0 :(得分:0)

我追查了这个问题:

C ++ / CLI包装器DLL实现了一个DllMain方法,该方法使用CRegistry库(https://code.google.com/p/cregistry/)读取注册表项。在try catch块中读取不存在的注册表项f *提高了上述应用程序的线程化能力......