В MATLAB я хочу синхронизировать функцию, написанную кем-то другим, и эта функция может использовать tic / toc внутри. Я хочу свой tic / toc. Но если внутренняя функция вызывает tic, тогда внешний таймер сбрасывается.

Как мне этого избежать? Я не хочу использовать timeit, потому что timeit будет вызывать внутреннюю функцию несколько раз, что мне не нужно.

MWE :

Внешний сценарий:

tic

inner_function()

elapsed_time = toc;

fprintf('Function took %f seconds\n', elapsed_time)

Внутренняя функция:

function [] = inner_function()

    pause(2)

    tic
    toc

end

Затем:

>> outer_script
Elapsed time is 0.000024 seconds.
Function took 0.000232 seconds

Если вы закомментируете tic / toc в inner_function(), вы получите следующее, чего я и хочу:

>> outer_script
Function took 2.000362 seconds

Просто для большего контекста, внешний скрипт принадлежит мне, и я использую его для тестирования функций, написанных моими учениками. Я хочу разрешить им использовать tic / toc в своем коде, как они того хотят, но я также хочу иметь возможность синхронизировать свой код независимо.

2
LarrySnyder610 6 Дек 2018 в 04:11

1 ответ

Лучший ответ

Вы можете сделать это, назначив вызовы tic переменной. Позже передайте желаемый таймер toc в качестве аргумента.

function [] = inner_function()    
    pause(2)    
    tic
    toc    
end

Повторный запуск измененного примера,

clock2 = tic;
inner_function()
elapsed_time = toc(clock2);
fprintf('Function took %f seconds\n', elapsed_time)
Elapsed time is 0.000009 seconds.
Function took 2.009997 seconds
6
Matt 6 Дек 2018 в 01:26