【发布时间】:2017-10-24 17:30:55
【问题描述】:
我已经设置了一台新的开发机器;它正在运行 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
--edit:编译正常,没有警告。运行“看似”正常,没有错误并且不会终止,只是挂在那里,好像主线程正在休眠一样。
--edit 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();
}
【问题讨论】:
-
没有Minimal, Complete, and Verifiable Example 真的很难说什么。
-
我发送的“简单线程示例”的链接还不够?然后我将代码粘贴在这里...编辑:粘贴:)
-
添加缺少的结束引号后,在 clang 下工作正常。你用的是哪个编译器?
-
在VS下运行时,有一个停止按钮可以中断执行。您是否使用它并检查调用堆栈以查看是否有任何线索?
-
@RichardHodges VS2017 使用所有默认设置。 DarkFalcon:我有,但在我来到这里告诉你我有但什么也没找到之前我继续尝试并再次查看:注意到我收到一条消息,指出线程 0x### 以代码 255 退出并且如果我让它坐一会儿,我会得到另一个存在代码 0 的线程(一直以来一切都卡住了)。发现了另一个问题:link 所以我会尝试重新编译 boost 并回复你。大概只有明天。谢谢
标签: c++ multithreading boost