相关疑难解决方法(0)

CLI DLL 的本机库中互斥锁的解决方法

我正在为本机 C++ 库编写 C++/CLI 包装器。在返回给 CLI 包装器的类之一中,使用线程,特别#include <mutex>是在标头中定义类级别互斥锁。

问题是,一旦将标头引入 CLI 代码(启用了 /clr 选项),我就会收到在<mutex>使用 /clr 或 /clr:pure 编译时不受支持的错误。

阅读这篇文章How to implement a unmanaged thread-safe collection when I get this error: <mutex> is not supported when compiling with /clr,有一篇博客文章提到了一些可能的解决方法。但是,变通方法假设您不需要任何会导致冲突的头文件,并且所有这些都可以在类函数中完成,基本上是从 CLI 应用程序中隐藏线程函数。

在类级别互斥锁的情况下,情况并非如此。它必须在标题中。

有什么方法可以使 CLI 应用程序与线程化的本机库一起工作?

是的,我知道托管和非托管代码之间的 GetCurrentThreadID() 问题,但正确的方法是什么?还是没有办法解决?

我对不得不合并 ZMQ 之类的东西感到畏缩,因为这是在一个关键部分,现在拥有三个数据副本(可能非常大)将令人望而却步。(一个在托管端,一个在本地,一个通过 ZMQ 中的消息缓冲区)。我知道 ZMQ 的零拷贝,但没有尝试在托管和非托管 C++ 之间进行 inproc 以查看是否可以共享内存。如果可能,它可能需要在整个应用程序中使用低级别连续数据结构,否则会遭受再次复制数据的后果。

那里有没有像样的解决方案的向导?

multithreading mutex c++-cli

5
推荐指数
1
解决办法
2944
查看次数

VC2008,如何在C++/CLI项目中为单个文件关闭CLR标志

这篇文章说可以关闭单个.cpp文件的CLR标志.

从帖子: 您可以单独在每个.cpp文件中打开或关闭/ CLR.为整个项目打开它.如您所做,然后关闭仅包含本机(非托管)代码的文件.当您打开VC++ procject属性对话框时,仍然可以单击解决方案资源管理器中的文件/项目来更改您正在处理的范围.单击非托管.cpp文件以仅为该文件设置选项.

这是真的?我无法弄清楚如何通过我的C++/CLI项目的属性页面来做到这一点.我怎么做到这一点?

clr c++-cli visual-studio-2008

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++-cli ×2

clr ×1

multithreading ×1

mutex ×1

visual-studio-2008 ×1