//---------------------------------------------------------------------- // Copyright 2009 Cadence Design Systems, Inc. // All Rights Reserved Worldwide //---------------------------------------------------------------------- #include class my_exception { public: my_exception(const char* s) : s_(s) { } const char* message() { return s_.c_str(); } protected: std::string s_; }; SC_MODULE(top) { public: SC_CTOR(top) { SC_THREAD(victim); h = sc_get_current_process_handle(); SC_THREAD(perpetrator); } void victim() { try { cerr << sc_time_stamp() << ": starting victim thread" << endl; ::sc_core::wait(100, SC_NS); } catch (my_exception& x) { cerr << sc_time_stamp() << ": in victim thread, caught exception " << x.message() << ", exiting" << endl; return; } } void perpetrator() { wait(10, SC_NS); cerr << sc_time_stamp() << ": in perpetrator throwing exception in victim " << endl; h.throw_it(my_exception("from pepetrator")); cerr << sc_time_stamp() << ": in perpetrator after throwing exception in victim " << endl; } protected: sc_process_handle h; }; int sc_main (int argc, char *argv[]) { top t("top"); sc_start(); return 0; }