Boost.Threadです。Stl.Threadに取り込まれますが若干機能が異なります。
LinuxでもWindowsでも動きます。
その他、同期をとるための条件変数や中断命令などがあります。
LinuxでもWindowsでも動きます。
その他、同期をとるための条件変数や中断命令などがあります。
class SomeClass
{
public:
SomeClass() {}
void Start()
{
//多重起動チェック
if( mThread.get_id() != boost::thread::id() ) return;
mActiveFlag = true;
mThread = boost::thread( &SomeClass::ThreadFunction, this );
}
void Stop()
{
//このサンプルでは不要だが、スレッド間で共有する変数に変更を加えるときはロックする
{
LockType lock(mMutex);
mActiveFlag = false;
}
mThread.join();
}
private:
void ThreadFunction()
{
bool active_flag = true;
while(active_flag)
{
// working here
active_flag = mActiveFlag;
}
}
bool mActiveFlag;
boost::thread mThread;
boost::mutex mMutex;
typedef boost::mutex::scoped_lock LockType;
};
SomeClass s;
s.Start(); // start thread
s.Stop(); // stop thread

コメントをかく