/* * Copyright (C) 2004 Aleksandar Colovic * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * */ #include #include #include using namespace std; class T { public: T(const char* pstrThread): m_strThread(pstrThread) {} ~T() {cout << m_strThread << " : destructor called!" << endl;} private: string m_strThread; }; void* doWork(void* pArg) { T t("First thread"); pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0); sleep(10); return 0; } void* doWork2(void* pArg) { T t("Second thread"); pthread_exit(0); return 0; } void* doWork3(void* pArg) { try { T t("Third thread"); pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, 0); sleep(10); } catch(...) { cout << "Exception handler called!" << endl; throw; } return 0; } int main(int argc, char* const argv[]) { pthread_t hThread1; pthread_create(&hThread1, 0, &doWork, 0); pthread_cancel(hThread1); pthread_join(hThread1, 0); pthread_t hThread2; pthread_create(&hThread2, 0, &doWork2, 0); pthread_join(hThread2, 0); pthread_t hThread3; pthread_create(&hThread3, 0, &doWork3, 0); pthread_cancel(hThread3); pthread_join(hThread3, 0); return 0; };