我在 Windows 上使用一个非常简单的 boost 示例,我遇到了几个奇怪的问题。
这是程序:
// 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
实际上并没有在休眠,而是立即返回。当我尝试加入线程时,调试器中也会出现一般异常。真正奇怪的是,调用boost::this_thread::sleep
在 main 方法中的调用工作正常!
有谁知道问题可能是什么?
我在 Windows 7 上,使用 boost 1_53_0。我将 boost 线程库构建为静态库,并将其与使用 Visual Studio 2008 构建的应用程序链接。