У меня есть программа, написанная на C, которую я хотел бы пройти через миллисекунду и изменить входные переменные во время выполнения. Я считаю, что Matlab может это сделать, но я не уверен, как это сделать. Я создал mexFunction для запуска моего кода в Matlab, но не могу понять, как изменить переменные в правильные времена. Как я могу это сделать?Временная программа через программу
0
A
ответ
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.
Могу ли я надежно пройти через гранулярность, равную 100 мс? –
Короткий ответ: да. Длинный ответ: нет никаких гарантий (даже при том, что спин-ожидание будет справедливым, но это, по крайней мере, более точно). Попробуйте и посмотрите, достаточно ли это для вас. В Windows потоки переносятся один раз каждые 15 мс, в Linux один раз каждые 1 мс. – such