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
実際にはスリープ状態ではなく、すぐに戻ってくることです。また、スレッドに参加しようとすると、デバッガーで一般的な例外が発生します。本当に奇妙なことはboost::this_thread::sleep
、メイン メソッドでの呼び出しが正常に機能することです。
問題が何であるかを知っている人はいますか?
Windows 7 でブースト 1_53_0 を使用しています。ブースト スレッド ライブラリをスタティック ライブラリとしてビルドし、Visual Studio 2008 を使用してビルドしたアプリケーションにリンクしています。