#include <iostream>
#include <boost/thread.hpp>
using namespace std;
void func1(const int &id)
{
cout<<"thread #"<<id<<" start..."<<endl;
//sleep不会放弃时间片
boost::thread::sleep(boost::get_system_time()+boost::posix_time::seconds(3));
cout<<"thread #"<<id<<" end"<<endl;
}
void func2(const int &id)
{
cout<<"thread #"<<id<<" start..."<<endl;
//预定义中断点,主动放弃时间片
boost::thread::yield();
cout<<"thread #"<<id<<" end"<<endl;
}
void func3(const int &id)
{
cout<<"thread #"<<id<<" start..."<<endl;
//预定义中断点
boost::this_thread::interruption_point();
cout<<"thread #"<<id<<" end"<<endl;
}
//线程中断
int main()
{
boost::thread t1(func1, 11);
t1.interrupt();
boost::thread t2(func2, 22);
t2.interrupt();
boost::thread t3(func3, 33);
t3.interrupt();
t1.join();
t2.join();
t3.join();
system("pause");
return 0;
}
说明:结果显示只有线程2不会被中断
#include <iostream>
#include <boost/thread.hpp>
using namespace std;
void print(const int &id)
{
//创建一个不可被中断的对象
boost::this_thread::disable_interruption di;
cout<<boost::this_thread::interruption_enabled<<endl;
cout<<"thread #"<<id<<" start..."<<endl;
boost::thread::sleep(boost::get_system_time()+boost::posix_time::seconds(3));
for (int i=1; i<11; ++i)
{
cout<<"i="<<i<<" ";
}
cout<<endl;
boost::this_thread::restore_interruption ri(di);//到这里为止对象不可被中断
cout<<boost::this_thread::interruption_enabled<<endl;
}
int main()
{
boost::thread t1(print, 11);
boost::thread t2(print, 22);
boost::thread t3(print, 33);
t3.interrupt();
t1.join();
t2.join();
t3.join();
system("pause");
return 0;
}