コード例 #1
0
int Trick::Executive::set_time_tic_value(int in_tics) {

    int ret ;
    std::priority_queue< long long, std::vector< long long >, std::greater< long long > > new_freeze_times ;

    old_time_tic_value = time_tic_value ;

    time_tic_value = in_tics ;

    // set the JobData copy of the new tic value
    Trick::JobData::set_time_tic_value(in_tics) ;

    /* reset time tics */
    time_tics = (long long)round((double)time_tics / old_time_tic_value * time_tic_value) ;

    /* reset software frames */
    software_frame_tics = (long long)(software_frame * time_tic_value) ;
    freeze_frame_tics = (long long)(freeze_frame * time_tic_value) ;

    /* reset job times */
    reset_job_cycle_times() ;
    reset_job_call_times() ;

    /* reset freeze times */
    while ( ! freeze_times.empty() ) {
        new_freeze_times.push( (long long)round((freeze_times.top() / old_time_tic_value ) * time_tic_value) ) ;
        freeze_times.pop() ;
    }
    freeze_times = new_freeze_times ;

    if ( freeze_job != NULL ) {
        if ( freeze_job->next_tics != TRICK_MAX_LONG_LONG ) {
            freeze_job->next_tics =  (long long)round((freeze_job->next_tics / old_time_tic_value) * time_tic_value) ;
        }
    }

    /* reset stop time */
    if ( terminate_time != TRICK_MAX_LONG_LONG-1 ) {
        terminate_time = (long long)round((terminate_time / old_time_tic_value) * time_tic_value) ;
    }

    /* call jobs for other objects that need to know the time_tic changed. */
    time_tic_changed_queue.reset_curr_index() ;
    while ( (curr_job = time_tic_changed_queue.get_next_job()) != NULL ) {
        ret = curr_job->call() ;
        if ( ret != 0 ) {
            message_publish(MSG_ERROR, "ERROR: time_tic_changed job: %s FAILED.\n", curr_job->name.c_str()) ;
            return(ret) ;
        }
    }

    // reset the thread cycle times
    unsigned int ii ;
    for ( ii = 0 ; ii < threads.size() ; ii++ ) {
        threads[ii]->time_tic_changed(old_time_tic_value , time_tic_value) ;
    }

    return(0) ;
}
コード例 #2
0
ファイル: Executive.cpp プロジェクト: Arafatk/trick
int Trick::Executive::set_time(double in_time) {
    time_tics = (long long)(in_time * time_tic_value) ;
    for (unsigned int ii = 0 ; ii < threads.size() ; ii++ ) {
       threads[ii]->curr_time_tics = time_tics ;
    }
    reset_job_call_times() ;
    return(0) ;
}
コード例 #3
0
ファイル: Executive.cpp プロジェクト: Mr-Kumar-Abhishek/trick
int Trick::Executive::set_time(double in_time) {
    sim_start = in_time ;
    time_tics = (long long)(in_time * time_tic_value) ;
    next_frame_check_tics = (long long)(time_tics + software_frame_tics) ;
    for (unsigned int ii = 0 ; ii < threads.size() ; ii++ ) {
       threads[ii]->curr_time_tics = time_tics ;
    }
    reset_job_call_times() ;
    return(0) ;
}
コード例 #4
0
ファイル: Executive.cpp プロジェクト: Arafatk/trick
int Trick::Executive::set_time_tics(long long in_tics) {
    time_tics = in_tics ;
    reset_job_call_times() ;
    return(0) ;
}