#define SC_INCLUDE_DYNAMIC_PROCESSES #include using namespace sc_core; using namespace sc_dt; using std::cout; using std::endl; // 3) terminated_event() SC_MODULE(M) { SC_CTOR(M) { SC_THREAD(T); } void T() { sc_process_handle h1 = sc_spawn(sc_bind(&M::proc, this, 2)); sc_process_handle h2 = sc_spawn(sc_bind(&M::proc, this, 3)); sc_process_handle h3 = sc_spawn(sc_bind(&M::proc, this, 1)); sc_assert(sc_time_stamp() == sc_time(0, SC_NS)); wait(h1.terminated_event() & h2.terminated_event() & h3.terminated_event()); sc_assert(sc_time_stamp() == sc_time(3, SC_NS)); if (h1.valid()) sc_assert (h1.terminated()); if (h2.valid()) sc_assert (h2.terminated()); if (h3.valid()) sc_assert (h3.terminated()); h1 = sc_spawn(sc_bind(&M::proc, this, 10)); h2 = sc_spawn(sc_bind(&M::proc, this, 30)); h3 = sc_spawn(sc_bind(&M::proc, this, 20)); sc_assert(sc_time_stamp() == sc_time(3, SC_NS)); wait(h1.terminated_event() | h2.terminated_event() | h3.terminated_event()); sc_assert(sc_time_stamp() == sc_time(13, SC_NS)); sc_assert(h2.valid()); sc_assert( !h2.terminated() ); sc_assert(h3.valid()); sc_assert( !h3.terminated() ); wait(h2.terminated_event() & h3.terminated_event()); sc_assert(sc_time_stamp() == sc_time(33, SC_NS)); } void proc(int delay) { wait(delay * sc_time(1, SC_NS)); } }; SC_MODULE(Top) { M *m; SC_CTOR(Top) { m = new M("m"); } }; int sc_main(int argc, char* argv[]) { cout << "Should be silent..." << endl; Top top("top"); sc_start(); cout << endl << "Success" << endl; return 0; }