
#include<boost/thread.hpp>
#include<boost/chrono.hpp>
#include<iostream>
#include<exception>

using namespace std;

void worker(int tid) {
	try {
	while(true){
	    boost::this_thread::interruption_point();
	    boost::this_thread::sleep_for(boost::chrono::milliseconds(100));
	    }
	   } catch(...) {
	    cout << "Thread: "<<tid <<" interrupted "<<endl;
	               }
	              }
int main(){
	boost::thread_group tg;
	int count;

	try{
	while(true){
		tg.create_thread(boost::bind(worker,count)); 
		count++; 
		   }
	
        }catch(exception &e){
	   cout<<"Exception: " <<e.what() <<endl;
	   cout<<"Max count= "<<count <<endl;
                            }
	tg.interrupt_all();
	tg.join_all();
          }
