首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么应该是监视器中的对象::enter

什么应该是监视器中的对象::enter
EN

Stack Overflow用户
提问于 2012-08-18 07:24:38
回答 1查看 64关注 0票数 0

我还在熟悉多线程的锁定。

代码语言:javascript
运行
复制
Monitor::Enter(obj);

try
{   
    ///do work
}

finally
{
    Monitor::Exit(obj);
}

应该在什么地方声明obj?我在类定位器的构造函数中声明它,

代码语言:javascript
运行
复制
Locator()
{ 
    System::Object^ obj = gcnew System::Object();
}

并在类的私有变量中声明obj

代码语言:javascript
运行
复制
private:
    System::Object^ obj;

但它给了我一个错误,因为Monitor::Enter(obj)

代码语言:javascript
运行
复制
Value cannot be null.

任何建议都是值得感谢的。

EN

回答 1

Stack Overflow用户

发布于 2012-08-18 07:31:45

你的构造函数应该是:

代码语言:javascript
运行
复制
Locator()
: obj(gcnew System::Object())
{  }

您正在做的是创建一个新的局部变量,该变量立即超出作用域,将其跟踪的对象带入早期的坟墓。您想要做的是初始化成员变量。在您的示例中,成员变量一直保留为null,导致您观察到的错误。

(因为我不太了解CLI,所以可能不允许初始化构造函数初始化器列表中的跟踪引用。在这种情况下,可以这样写:)

代码语言:javascript
运行
复制
Locator() { obj = gcnew System::Object(); }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12014340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档