使用 CLR 提升线程

Posted

技术标签:

【中文标题】使用 CLR 提升线程【英文标题】:Boost Threads with CLR 【发布时间】:2011-08-31 13:03:48 【问题描述】:

使用 Visual Studio 2008 和 Boost Libraries 1.46.1 我想用 /CLR 标志编译和链接以下内容:

#include <boost/thread/thread.hpp>
void run() 
int main(int argc, char *argv[])

    boost::thread t(run);   

第一个错误是关于 boost::thread 中前向声明的虚拟结构。 This post 通过声明来解决这个问题:

namespace boost 
    struct thread::dummy ;

当然,我现在可以编译了,但是我收到了链接器警告

警告 1 警告 LNK4248:'boost.detail.win32._SECURITY_ATTRIBUTES' 的未解析 typeref 令牌 (0100001F);图片可能无法运行

运行应用程序导致

应用程序无法正确启动 (0xc000007b)。

前面提到的论坛帖子中的任何建议都不适合我。我已经构建了 Boost Threads 库的静态版本,它在没有 /CLR 标志的情况下运行良好。调试/发布没有区别。我在Win7 32位下运行。

有什么提示吗?

【问题讨论】:

boost mutex C++/CLI problems的可能重复 @ildjarn:怎么样?这是一个链接器错误。链接的线程是运行时错误。 @Matt : "应用程序无法正确启动 (0xc000007b)。" 听起来像是运行时错误。 @ildjarn:你是对的。谁还需要阅读理解?我认为它们是重复的,链接器警告是红鲱鱼。 你试过在 DLL 中使用 boost 吗?我记得一些关于静态库中的非 clr 链接到 clr exe 是不可能的... 【参考方案1】:

我已经遇到过这个问题,我不记得我从哪里得到的,但一种解决方法是在包含所有像这样的 boost 标头后声明“boost.detail.win32._SECURITY_ATTRIBUTES”。

namespace boost  
    namespace detail  
        namespace win32  
            struct _SECURITY_ATTRIBUTES: public ::_SECURITY_ATTRIBUTES ; 
        ;
    ;
; 

如果您希望所有人都能看到,请删除命名空间。

【讨论】:

宾果游戏!这是原帖lists.boost.org/threads-devel/2009/10/0502.php

以上是关于使用 CLR 提升线程的主要内容,如果未能解决你的问题,请参考以下文章

线程机制CLR线程池以及应用程序域

SQL CLR 中的多线程缓存

C# 线程——《CLR via C#(第四版)》

CLR 线程同步

CLR基础与术语

《CLR via C#》之线程处理——线程池与任务