程序甚至启动之前boost :: thread挂起?

时间:2017-05-24 11:34:39

标签: c++ multithreading boost

我已经建立了一台新的开发机器;它正在运行Windows 10& Visual Studio 2017社区。安装和构建的boost(1.64.0,完整版),都很好。

我一直在使用一些IPC,一切都很好,但后来我开始出现一种奇怪的行为:我的程序一开始就挂起了。

我正在处理控制台应用程序。程序刚刚启动,光标闪烁,好像它正在等待一些用户输入,或者主线程是否在任何输出发生之前处于休眠状态。即使我的所有程序首先要打印标题。

在尝试识别问题后出现了很多痛苦的失败后,我注意到只有当我使用任何boost.thread功能时才会发生这种情况。所以我想也许在将项目从VS2015迁移到VS2017时会遇到一些问题;创造了一个全新的项目,同样的事情发生了。

即使使用最简单的程序(例如simple thread example)......我得到的只是一个闪烁的光标。无论我是使用调试版还是发布配置文件构建,即使尝试调试。

VS永远不会到达任何断点(即使使用“step into”命令启动程序!)。 “挂起”似乎发生在我的代码入口点之前。

所以我希望问题很清楚:“哔哔正在发生什么?”

如前所述:其他boost库工作正常,包括boost :: locale和boost :: chrono

- 编辑:编译好,没有警告。运行“看似”很好,没有错误,也没有终止,只是挂在那里,好像主线程正在睡觉。

- 编辑2:完整代码示例:

#include <boost/thread.hpp>
#include <boost/chrono.hpp>
#include <iostream>

void wait(int seconds)
{
  boost::this_thread::sleep_for(boost::chrono::seconds{seconds});
}

void thread()
{
  for (int i = 0; i < 5; ++i)
  {
    wait(1);
    std::cout << i << '\n';
  }
}

int main()
{
  //this point is never reached!!?! Hangs before my own code even starts
  std::cout << "start!" << std::endl;
  boost::thread t{thread};
  t.join();
}

1 个答案:

答案 0 :(得分:0)

好的,让它上班;我只是重建了提升,现在一切正常。必须看似问题program.exe: Native' has exited with code 255 (0xff)中提到的静态/动态混淆。

我使用以下参数重建:

b2.exe toolset=msvc-14.1 address-model=32 --build-dir=build\x64 install --prefix="C:\boost" -j4

(然后又是64位。