【问题标题】:Using boost threads when compiling with /clr使用 /clr 编译时使用 boost 线程
【发布时间】:2011-06-06 16:53:24
【问题描述】:

我已经放弃直接从 Windows API 创建 GUI,所以我将使用表单。我想多线程我的应用程序并将 GUI 包装在一个类中并将它放在一个单独的线程中。当我单击按钮等时,它将更改将从主线程读取的结构中的值。我的问题是,当我编译我的应用程序时,链接器出现错误。

1>Core.obj:错误LNK2022:元数据操作失败(8013119F):存在一个TypeRef,它应该但没有对应的TypeDef:(虚拟):(0x0100001f)。

我的 main 代码如下。

主函数() { //创建线程对象指针 boost::thread *GUIThread; //创建指向GUIInterface的指针,其中包含一个成员函数 //包含应用程序::运行 GUI接口 *myinterface; 我的界面 = 新的 GUI 界面; GUIThread = new boost::thread(boost::bind(&GUIInterface::MainFunction, myinterface)); 返回0; }

在主线程中创建类和调用函数时效果很好,但是使用boost会出现问题。我使用正确的编译器 MSVC-10.0 构建了 boost,并且线程库在过去一直有效,但 clr 只会导致问题。 有关如何解决此问题的任何建议? 或者,如果我应该只使用 .net 多线程(如果我这样做,我真的需要一些链接来了解如何在 c++ 中使用,我发现的大多数东西都在 C# 中)。 谢谢。

【问题讨论】:

  • 您收到此错误是因为 boost::thread 使用了右值引用。托管链接器不支持。您正以这种方式前往火车失事,用户界面不是您可以随便安装的东西。你必须创建一个单线程单元,一个 UI 基本上是线程不安全的。不知道如何让你远离麻烦。
  • 是否可以在没有右值的情况下构建 boost?

标签: .net c++ multithreading clr


【解决方案1】:

在托管应用程序中使用boost::thread 时有两个问题。第一个是您遇到的链接器错误。如果boost::thread 实现与您的应用程序静态链接,则第二个是应用程序启动时的初始化错误。

older bug report 中提到了这两个问题。我不知道这在以后的版本中是否有所改变; 1.43 也有同样的问题。我认为不会因为案件已结案wontfix

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    相关资源
    最近更新 更多