История изменений
Исправление note173, (текущая версия) :
У меня была такая реализация, но для 10-100 объектов:
Есть основной поток, в нем цикл. На каждом шаге делается проход (в том числе) по всем активным «таймерам». Для каждого вычисляется время до срабатывания, начиная от текущего момента. При отрицательном времени таймер срабатывает и сбрасывается. При положительном сравнивается с выделенной переменной, значение которой в начале примерно +INF, если меньше, то переменная перезаписывается. Поток засыпает на время, указанное в этой переменной (получается, что он проснется как раз к следующему событию).
При разных операциях, типа добавления таймеров или отмены, поток принудительно будится.
(Да, сортированный список тут сильно поможет оптимизировать цикл.)
Исходная версия note173, :
У меня была такая реализация, но для 10-100 объектов:
Есть основной поток, в нем цикл. На каждом шаге делается проход (в том числе) по всем активным «таймерам». Для каждого вычисляется время до срабатывания, начиная от текущего момента. При отрицательном времени таймер срабатывает и сбрасывается. При положительном сравнивается с выделенной переменной, значение которой в начале примерно +INF, если меньше, то переменная перезаписывается. Поток засыпает на время, указанное в этой переменной (получается, что он проснется как раз к следующему событию).
При разных операциях, типа добавления таймеров или отмены, поток принудительно будится.