#include "sim_objects/default_trick_sys.sm"

##include "threads/include/Thread1.h"

class testSimObject : public Trick::SimObject {

    public:
        int print_time (int thread) {
            message_publish(1, "thread %d: time = %8.2f\n", thread, exec_get_sim_time()) ;
            return 0  ;
        } ;

        testSimObject() {
            (10.0, "scheduled") print_time(0) ;
            C1 (1.0, "scheduled") print_time(1) ;
        }

} ;

class OverrunSimObject : public Trick::SimObject
{
public:
    Thread1 thread_25ms;
    Thread1 thread_50ms;
    Thread1 thread_100ms;

    OverrunSimObject() : thread_25ms(24000) , thread_50ms(48000) , thread_100ms(96000)
    {
        (0.025, "scheduled") trick_ret = thread_25ms.Step();
        C1 (0.05, "scheduled") trick_ret = thread_50ms.Step();
        C2 (0.1, "scheduled") trick_ret = thread_100ms.Step();
    }
} ;

// Instantiations
testSimObject test ;
OverrunSimObject deadlock_test;


// Connect objects
void create_connections() {

    // Set the default termination time
    exec_set_terminate_time(10.0) ;
    exec_set_freeze_frame(1.0) ;

}