c++ - C++/Clr 中 C++ 全局实例的多线程

标签 c++ multithreading c++-cli clr

我有一个类有 2 个方法,比如连接和断开连接。现在,当我调用 B 类时,我会使用该地址获取 A 的地址,我将使用该地址进行连接,完成后我必须调用 C 类以在同一地址上执行断开连接操作。

如果我将 A *a 作为全局变量,我可以实现这一点。但是当谈到多线程时,A 是全局的,只使用一个地址/实例,并且它在其他线程运行之前断开连接,导致访问冲突异常。

如何解决?提前致谢。

class A()
{
Connect();
Disconnect();
};
A *a = nullptr;

class B()
{
 a = new A(); 
 a->Connect();
}

class C()
{
 if(!a)
   a->Disconnect();
}

最佳答案

首先,您在 c 类中的 if 条件不正确。应该是if(a)。 因为如果一个变量有 null 值那么它可以通过你的 if 条件并且你想调用 null 变量的 disconnect 方法。 其次,您应该考虑在 b 类线程之后运行 c 类线程。

关于c++ - C++/Clr 中 C++ 全局实例的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48337960/

相关文章:

C++ char* 在operator=中重新初始化

.net - 来自非托管代码的 System.AccessViolationException?

C++CLI。 native 部分是否用纯 C++ 编写但在 CLI 中编译的速度与纯 native C++ 一样快?

c++ - 指向对象数组的指针需要公共(public)析构函数

c++ - boost 图形库定向 multimap edge_range 错误

c++ - 带有 SetParent() 的 WS_EX_LAYERED 不显示窗口

python - 正确终止在线程中运行的 Flask Web 应用程序

objective-c - 如何在 Objective-C 中等待线程完成

Java线程加入for循环,输出中的未知行为

c# - 带有 Win32 父窗口的 WPF OpenFileDialog;窗口在关闭时没有重新获得焦点