Qt中使用c#和std的mutex出现冲突

本人想在Qt项目中使用c#的一些功能,Qt代码中原本用的std::mutex。pro文件添加上托管编译后,一编译就报错:std里面没有mutex.

一开始以为是std冲突,但是怎么改都没用,包括修改头文件,重命名变量,修改引用名空间的位置等,都是无用功。弄了老久,实在找不出问题,就使用vs2015打开Qt项目进行编译。

错误	C1189	#error:  <mutex> is not supported when compiling with /clr or /clr:pure. (编译源文件 widget.cpp)	softpro	C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\mutex	9

网上找了找,大都是2014年左右的帖子了。回答千篇一律,都是复制粘贴的一个回答,在此贴出好访问的一个链接:https://oomake.com/question/4474586

接口什么的,本人也没试过,不知道行不行,就作为参考。

后来参考了这个博客,改了mutex和thread源代码,还是没用。这里也贴出来作为参考。https://blog.csdn.net/wenming111/article/details/103731896

继续搜索问题:c++ fatal error C1189: #error

image-20230106110944263

修改项目属性,还是没用。

最后想着,干脆改成C#里面的互斥锁算了。不过在此之前,先尝试了一些Qt自带的QMutex.

终于出现了区别,起码问题变得不一样了。

namespace'::escape_string": 此函数不能编译为托管,请考虑使用 #pragma 非托管

百度这个问题,找到了这篇帖子,这就是我想要的。https://www.cnblogs.com/carl2380/archive/2010/12/24/1915723.html 里面的场景四。

以下代码为原来的

#include<mutex>
void hello()
{
	static std::mutex mu;
	mu.lock();
	mu.unlock();
}

以下代码为修改后的。

#include <QMutex>
#pragma unmanaged
void hello()
{
	static QMutex mu;
	mu.lock();
	mu.unlock();
}
#pragma managed

太厉害了,这个预处理指令,轻松解决问题。

posted @ 2023-01-06 11:23  念秋  阅读(396)  评论(0编辑  收藏  举报