Чтобы написать MIDI-секвенсор, мне нужен устойчивый импульс, который вызывает процедуру синхронизации, которая имеет абсолютный приоритет над всем остальным в программе и предпочтительно над всем на компьютере. Я делаю это с помощью TimeSetEvent, как это:
TimeSetEvent (FInterval, 0, TimerUpdate, uInt32 (Self), TIME_PERIODIC);
где TimerUpdate - это обратный вызов, который возобновляет отдельный поток с приоритетом tpTimeCritical и вызывает процедуру (FOnTimer), в которой обрабатываются все события MIDI.
procedure TThreaded_Timer.Execute;
begin
if Assigned (FOnTimer) then
begin
while not Terminated do
begin
FOnTimer (Self);
if not Terminated then Suspend;
end; // while
end; // if
Terminate;
end; // Execute //
Хотя эта конструкция намного лучше, чем некоторые вещи, которые я пробовал прежде, она все еще очень чувствительна к некоторым событиям. К моему удивлению, он заикается при каждом показе подсказки. Почему простой намек может вызвать такое прерывание потока, критичного ко времени? Конечно, я могу выключить его, но какие неприятные сюрпризы все еще ждут меня?