| #include <cc++/thread.h> |
| #include <cstdio> |
| #include <cstring> |
| #include <iostream> |
| |
| #ifdef CCXX_NAMESPACES |
| using namespace std; |
| using namespace ost; |
| #endif |
| |
| // Test child thread destroying before father |
| // |
| class Child: public Thread |
| { |
| public: |
| Child() |
| { } |
| void run() { |
| cout << "child start" << endl; |
| Thread::sleep(3000); |
| cout << "child end" << endl; |
| } |
| void final() { |
| // delete this; |
| } |
| }; |
| |
| class Father: public Thread |
| { |
| public: |
| Father() |
| { } |
| void run() { |
| cout << "starting child thread" << endl; |
| Thread *th = new Child(); |
| th->detach(); |
| Thread::sleep(1000); |
| cout << "father end" << endl; |
| } |
| void final() { |
| // delete this; - not used since detached threads self delete |
| // reset memory to test access violation |
| memset(this,0,sizeof(*this)); |
| } |
| }; |
| |
| int main(int argc, char* argv[]) |
| { |
| cout << "starting father thread" << endl; |
| Father *th = new Father(); |
| th->start(); |
| Thread::sleep(10000); |
| |
| return 0; |
| } |
| |