我在Windows上使用一个非常简单的提升示例,我遇到了几个奇怪的问题。
以下是该计划:
// BoostThreadTest.cpp : Defines the entry point for the console application.
//
#define BOOST_ALL_NO_LIB
#include "stdafx.h"
#include <iostream>
#include <boost/thread.hpp>
#include <boost/date_time.hpp>
void workerFunc()
{
boost::posix_time::seconds workTime(3);
std::cout << "Worker: running" << std::endl;
boost::this_thread::sleep(workTime);
std::cout << "Worker: finished" << std::endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << "main: startup" << std::endl;
boost::thread workerThread(workerFunc);
std::cout << "main: waiting for thread" << std::endl;
boost::posix_time::seconds workTime(10);
boost::this_thread::sleep(workTime);
//workerThread.join();
std::cout << "main: done" << std::endl;
return 0;
}
主要问题是boost::this_thread::sleep
中的workerFunc
调用实际上并未休眠,而是立即返回。当我尝试与线程连接时,我在调试器中也得到一个通用异常。真正奇怪的是,在main方法中调用boost::this_thread::sleep
可以正常工作!
有没有人知道问题可能是什么?
我在Windows 7上,使用boost 1_53_0。我将boost线程库构建为静态库,并将其与使用Visual Studio 2008构建的应用程序链接。