#include #include void *funcToKill(void */*ptr*/) { TThread::SetCancelOn(); cout<<"Starting func"<Sleep(1000); }; return 0; } void test(void) { TThread *t1 = new TThread("func", funcToKill, 0); t1->Run(); gSystem->Sleep(5000); t1->Kill(); do { cout<<"Waiting to be canceled"<Sleep(1000); } #if 1 /* 0 or 1 */ while(t1->GetState()!=TThread::kCanceledState); // this "works" #else /* 0 or 1 */ while(t1->GetState()!=TThread::kCancelingState); // this "hangs" #endif /* 0 or 1 */ t1->Run(); t1->Join(); return; }