2015-02-12 3 views
0

У меня есть программа, написанная на C, которую я хотел бы пройти через миллисекунду и изменить входные переменные во время выполнения. Я считаю, что Matlab может это сделать, но я не уверен, как это сделать. Я создал mexFunction для запуска моего кода в Matlab, но не могу понять, как изменить переменные в правильные времена. Как я могу это сделать?Временная программа через программу

ответ

0

Вы не можете рассчитывать на планировщик потоков ОС, чтобы надежно планировать поток для выполнения с разрешением в миллисекундах. Для того, чтобы получить высокое разрешение, нужно закрутить-ждать:

function fixed_interval(f,dt) 
t = tic; 
i = 0; 
while true 
    while toc(t)<i*dt 
    end 
    f(); 
    i=i+1; 
end 

Или

function fixed_delay(f,dt) 
while true 
    t=tic; 
    while toc(t)<dt 
    end 
    f(); 
end 

Это, как говорится, в зависимости от ваших потребностей, если вам не нравится идея использования 100% от CPU, и поскольку вы все равно используете C; вы можете попробовать один из представленных здесь ответов и выставить функцию сна из C в вашем mex: How to make thread sleep less than a millisecond on Windows.

+0

Могу ли я надежно пройти через гранулярность, равную 100 мс? –

+0

Короткий ответ: да. Длинный ответ: нет никаких гарантий (даже при том, что спин-ожидание будет справедливым, но это, по крайней мере, более точно). Попробуйте и посмотрите, достаточно ли это для вас. В Windows потоки переносятся один раз каждые 15 мс, в Linux один раз каждые 1 мс. – such