31#if !defined(sc_thread_process_h_INCLUDED)
32#define sc_thread_process_h_INCLUDED
52# define DEBUG_MSG(NAME,P,MSG) \
54 if ( P && ( (std::strlen(NAME)==0) || !std::strcmp(NAME,P->name())) ) \
55 std::cout << "**** " << sc_time_stamp() << " (" \
56 << sc_get_current_process_name("** NONE **") << "): " << MSG \
57 << " - " << P->name() << std::endl; \
60# define DEBUG_MSG(NAME,P,MSG)
67class sc_event_and_list;
68class sc_event_or_list;
75class sc_process_handle;
76class sc_process_table;
124 virtual const char*
kind()
const
125 {
return "sc_thread_process"; }
223 DEBUG_MSG( DEBUG_NAME ,
this,
"suspending thread");
225 DEBUG_MSG( DEBUG_NAME ,
this,
"resuming thread");
243 DEBUG_MSG( DEBUG_NAME ,
this,
"throwing reset for");
248 DEBUG_MSG( DEBUG_NAME,
this,
"invoking throw_it for");
256 DEBUG_MSG( DEBUG_NAME,
this,
"throwing kill for");
260 if( !unwinding_preempted )
262 ,
"unexpected unwinding/throw status" );
265 DEBUG_MSG( DEBUG_NAME,
this,
"restarting thread");
283 e.add_dynamic(
this );
337 e.add_dynamic(
this );
413 for (
int mon_i = 0; mon_i < mon_n; mon_i++ )
450 return thread_p->m_cor_p;
#define DEBUG_MSG(NAME, P, MSG)
#define SC_REPORT_FATAL(msg_type, msg)
#define SC_REPORT_ERROR(msg_type, msg)
const char SC_ID_WAIT_NEGATIVE_CYCLES_[]
class SC_API sc_simcontext
SC_API void sc_set_stack_size(sc_method_handle, std::size_t)
SC_API void wait(int, sc_simcontext *)
SC_API const char SC_ID_INTERNAL_ERROR_[]
const char SC_ID_WAIT_DURING_UNWINDING_[]
class sc_thread_process * sc_thread_handle
sc_cor * get_cor_pointer(sc_process_b *process_p)
void sc_thread_cor_fn(void *arg)
void(sc_process_host::* sc_entry_func)()
sc_process_b * sc_get_current_process_b()
sc_descendant_inclusion_info
virtual void yield(sc_cor *next_cor)=0
void add_dynamic(sc_method_handle) const
const char * name() const
sc_simcontext * simcontext() const
virtual void throw_it()=0
sc_event * m_reset_event_p
void report_immediate_self_notification() const
sc_process_b * m_runnable_p
process_throw_type m_throw_status
const sc_event_list * m_event_list_p
sc_throw_it_helper * m_throw_helper_p
sc_event * m_timeout_event_p
friend class sc_unwind_exception
friend class sc_thread_process
const sc_event * m_event_p
void signal_monitors(int type=0)
virtual ~sc_thread_process()
friend class sc_process_table
virtual void kill_process(sc_descendant_inclusion_info descendants=SC_NO_DESCENDANTS)
sc_thread_handle next_runnable()
friend SC_API void wait(const sc_time &, const sc_event_or_list &, sc_simcontext *)
friend SC_API void wait(const sc_event &, sc_simcontext *)
friend SC_API void wait(const sc_time &, const sc_event &, sc_simcontext *)
friend void sc_thread_cor_fn(void *)
virtual void resume_process(sc_descendant_inclusion_info descendants=SC_NO_DESCENDANTS)
virtual const char * kind() const
void set_next_runnable(sc_thread_handle next_p)
friend void sc_set_stack_size(sc_thread_handle, std::size_t)
std::vector< sc_process_monitor * > m_monitor_q
sc_thread_handle next_exist()
void set_next_exist(sc_thread_handle next_p)
void wait_cycles(int n=1)
friend SC_API void wait(const sc_event_or_list &, sc_simcontext *)
virtual void throw_user(const sc_throw_it_helper &helper, sc_descendant_inclusion_info descendants=SC_NO_DESCENDANTS)
friend SC_API void wait(const sc_time &, sc_simcontext *)
virtual void enable_process(sc_descendant_inclusion_info descendants=SC_NO_DESCENDANTS)
void remove_monitor(sc_process_monitor *monitor_p)
virtual void prepare_for_simulation()
friend SC_API void wait(const sc_time &, const sc_event_and_list &, sc_simcontext *)
friend SC_API void wait(const sc_event_and_list &, sc_simcontext *)
bool trigger_dynamic(sc_event *)
void add_monitor(sc_process_monitor *monitor_p)
virtual void suspend_process(sc_descendant_inclusion_info descendants=SC_NO_DESCENDANTS)
friend SC_API void wait(sc_simcontext *)
virtual void throw_reset(bool async)
sc_thread_process(const char *name_p, bool free_host, sc_entry_func method_p, sc_process_host *host_p, const sc_spawn_options *opt_p)
void set_stack_size(std::size_t size)
virtual void disable_process(sc_descendant_inclusion_info descendants=SC_NO_DESCENDANTS)
friend sc_cor * get_cor_pointer(sc_process_b *process_p)
friend SC_API void wait(int, sc_simcontext *)