Asio C ++ 11线程异常:引用的对象类型不支持尝试的操作

时间:2015-08-13 15:22:05

标签: multithreading c++11 boost-asio mingw-w64

我正在尝试使用C ++ 11 Asio的标头库(不带助推器)编写与iOS和Android的HTTPS客户端连接, 我正在Windows 10上测试c ++代码。(我也在Windows 8上测试过,但问题是一样的)

我有一个例外,所以我自己写了一个简单的例子来找出发生了什么。这是代码:

#include <iostream>
#include "asio.hpp"

void hello_world_thread() {
    std::cout << "Hello world!" << std::endl;
}

int main()
{
    asio::thread t(
        std::bind(
            &hello_world_thread
        )
    );

    t.join();

    return 0;
}

如果我在Code :: Blocks内部/外部运行它,我得到以下异常:

  

在抛出'std :: system_error'实例后终止调用   what():thread:该类型不支持尝试的操作   引用的对象。

     

此应用程序已请求运行时将其终止   不寻常的方式请联系应用程序的支持团队获取更多信息   信息。

构建命令是:

  

x86_64-w64-mingw32-g ++。exe -std = c ++ 11 -Wall   -DASIO_STANDALONE -g -Iasio -c D:\ Projektek \ C ++ \ AsioTeszt \ main.cpp -o obj \ Debug \ main.o   x86_64-w64-mingw32-g ++。exe -o bin \ Debug \ AsioTeszt.exe   obj \ Debug \ main.o -lws2_32 -static -static-libgcc -static-libstdc ++ -m64

我已经尝试了 -pthread 标志,但错误是一样的。

MinGW版本:gcc版本5.1.0(x86_64-win32-seh-rev0,由MinGW-W64项目构建) Asio版本:1.10.6(并试用了Dev发行版1.11.0)

1 个答案:

答案 0 :(得分:0)

最后,经过3天的痛苦,我想通了。 问题出在MinGW安装上,因为我在 Threads 部分选择了 win32 。 重新安装 posix 线程后,一切正常。

编辑:我再次遇到此问题,但我在另一个项目中使用了Asio线程。所以我开始删除所有内容,直到找到遗漏的内容。

#include <map>

没有它,它就不会工作。