- Я планирую контролировать все в таймере (ах).Установите глобальную переменную (элементарную блокировку), чтобы запустить поток.Если «блокировка» уже установлена, игнорируйте ее.Нить очищает его по окончании.Должен ли я использовать более надежный механизм блокировки / очереди для своих потоков?(У меня уже установлен OmniThread)
Я бы не стал беспокоиться о таймере вообще.Сделайте так, чтобы петля вашей нити выглядела так, и у вас будут задержки.Вам НЕ потребуется блокировка, потому что есть только один поток, он не будет спать, пока не закончится предыдущее задание.
procedure YourThread;
var N: Integer;
begin
while not Terminated do
begin
// Figure out if there's a job to do
// Do the job
// Sleep for a while, but give the thread a chance to notice
// it needs to terminate.
for N := 1 to 500 do
if not Terminated then
Sleep(100);
end;
end;
- Как запустить поток с низким приоритетом?Я не хочу, чтобы приложение чувствовало себя вялым, когда фоновый поток выполняет вставку данных или работу в сети.
Не беспокойтесь.Вы можете легко использовать SetThreadPriority , но это того не стоит.Если ваш фоновый поток ожидает ввода-вывода (работа в сети), он не будет потреблять ресурсы процессора.Даже если ваш фоновый поток работает на полной скорости, ваш графический интерфейс не будет вялым, поскольку Windows хорошо распределяет доступное время ЦП между всеми доступными потоками.
- Есть ли чистый способпроверять активность пользователя и запускать эту тему только тогда, когда пользователь не занят клавиатурой / мышью?
Опять же, зачем беспокоиться о проверке активности пользователя?Проверка электронной почты связана с сетью (т. Е. С I / O), поток проверки электронной почты будет в основном бездействовать.