// 長くてゴメンナサイ…
#include <iostream>
#include <string>
#include <boost/thread.hpp>
using namespace std;
class urger
{
	typedef boost::mutex::scoped_lock lock;
	volatile bool                     end_flag;
	boost::mutex                      ef_guard;
	boost::condition_variable_any     exitRequest;
public:
	urger() : end_flag(false) {}
	// スレッドのメインルーチン
	void u_main()
	{
		// 基本的に無限ループしておく
		for(;;)
		{
			lock lk(ef_guard);
			if( end_flag ) break;
			// 現在の5秒後の時間を計算
			boost::xtime xt;
			boost::xtime_get(&xt, boost::TIME_UTC);
			xt.sec += 5;
			// 終了通知を待ちます。ただし5秒たったら待ち解除
			if( exitRequest.timed_wait( lk, xt ) ) break;
			else cout << "\n何か書くのじゃー!: " << flush;
		}
	}
	void exit()
	{
		// 終了を通知します。
		lock lk(ef_guard);
		end_flag = true;
		exitRequest.notify_one();
	}
};
int main()
{
	// 催促スレッド起動
	urger u;
	boost::thread thr( &urger::u_main, &u );
	// 入力待ち
	cout << "何か書いてね: ";
	string str;
	getline( cin, str );
	// 入力が終わったら、終了して欲しいことをスレッドに通知
	u.exit();
	// 催促スレッドの終了待ち
	thr.join();
	cout << "Thank you!" << endl;
	return 0;
}
何も打ち込まないでいると、5秒ごとに催促してきます。(^^;
POSIXのpthreadか、もしくはWindowsが使える環境で動くスレッドライブラリです。
JavaやらRubyやら、最近の言語はちゃんと言語使用レベルで 「スレッド」 が規定されているのですが、今のところC++標準にはそういったものはありません。 なので、マルチスレッドなプログラムを出来る限りプラットフォーム非依存に書く、 というのは結構面倒な作業でした。
そこで、ACE や ZThreads などの portable なライブラリが便利なわけですが、そんな中の一つとして、 この boost::thread があります。
Mutex, Condition variable, TSS 辺りの基本的な部品はきちんと揃っているので、 マルチプラットフォームでマルチスレッドなソフトを書きたい方、 あるいは単にC++で書かれたスレッドライブラリを使いたい方に便利かと思います。
