@daniil14056

Как задержать выполнение функции, что бы она подождала пока переменные с которыми она работает обновились?

Название вопроса ересь, вот пример задачи.
Задача такая. Реализовать (визуализировать) на самом самом самом низком уровне процессора АЛУ. К примеру операцию сложения.
Что есть. Есть 2 переменных, которых нужно сложить, эти переменные, имеют на set-рах события OnChange() при каждом изменении(или не изменении).
Есть функция Sum() которая должна вызываться в OnChange() с задержкой, подождать пока оба операнда не поменяются.
1. И тут главное она должна вызываться только после того как на оба параметра пришло событие OnChange() это могу сделать.
2. И еще главнее, что вообще не знаю как сделать Событие может прийти только с 1 переменной. И не придет в ближайшие НаноСекунды(такт процессора) со второй, тогда с нее взять старое значение(А это противоречит первому условию, но надо как-то выполнить.
Где-то в коде
Buf_1.SetReg1(true); // установить значение
//....где-то в другом вообще месте, в другой итерации, или где-то в середине очереди, короче выполнится через N - времени
// Buf_1.SetReg2(true); // тут могло и не быть ничего.
Задержка распространения - Propagation delay Задержка распространения - вот это хочу реализовать.
https://ru.qaz.wiki/wiki/Propagation_delay

Задержка распространения вкратце(если кто может решение(алгоритм) без знаний процессора подсказать, это когда 2 сигнала на логическое устройство приходят в разное время(пикоссеунды). И тогда может быть такое, что после того придет 1-ый сигнал, он сложится со вторым(который еще не успел обновиться) откуда пойдут ошибки.
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
На счёт нано/пикосекунд не скажу, но в масштабах секунд/милисекунд это реализовать можно.

Приходит OnChange первого/второго поля
Мы выставляем флаг, что первое/второе поле изменилось
Если оба поля изменились, то суммируем их
Иначе запускаем таймер на некоторое время (например 1с)
После срабатывания таймера суммируем оба поля не смотря на флаги.
После суммирования флаги и таймер сбрасываем.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы