좀처럼 시간이없네요 ^^::
정리가 좀 안되긴 하지만 우선 코드만 올립니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream>
#include <string>
#define BOOST_THREAD_USE_LIB
#include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/recursive_mutex.hpp>
#include <boost/bind.hpp>
using namespace std;
using namespace boost;
using boost::thread;
using boost::mutex;
using boost::recursive_mutex;
using boost::bind;
class TZThread
{
public:
TZThread(AnsiString str) : m_str(str) { }
void operator() ()
{
i = 0;
boost::mutex::scoped_lock lockObj(g_mutex);
if( lockObj.locked() )
{
std::cout << lockObj.locked() << std::endl;
}
i++;
std::cout << "Hello MyThread " << i << " " << m_str.c_str() << std::endl;
lockObj.unlock();
if( lockObj.locked() )
{
std::cout << lockObj.locked() << std::endl;
}
}
int i;
static boost::mutex g_mutex;
AnsiString m_str;
};
boost::mutex TZThread::g_mutex;
class TZThread2
{
public:
TZThread2(AnsiString str, boost::mutex &amu) : m_str(str), m_mutex(amu)
{
i = 0;
}
void operator() ()
{
for( int j = 0; j < 1000; j++ )
{
boost::mutex::scoped_lock lockObj(m_mutex);
if( lockObj.locked() )
{
std::cout << lockObj.locked() << std::endl;
}
i++;
Sleep(100);
std::cout << "Hello MyThread " << i << " " << m_str.c_str() << std::endl;
lockObj.unlock();
if( lockObj.locked() )
{
std::cout << lockObj.locked() << std::endl;
}
}
}
int i;
boost::mutex &m_mutex;
AnsiString m_str;
};
class TZDelived : public TZThread2
{
public:
TZDelived(AnsiString str, boost::mutex &amu) : TZThread2( str, amu ) {};
};
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
boost::mutex iomutex;
//boost::thread myThread(TZThread2("hihihi", iomutex));
boost::thread myThread(TZDelived("hihihi", iomutex));
myThread.join();
std::cout << "End!" << std::endl;
system("pause");
return 0;
}
//---------------------------------------------------------------------------
|