1

我在 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 构建的应用程序链接。

4

0 回答 0