не важно где объявлена фунция. важно где она вызывается.
Еще раз.
В потоке объявляешь проперти (ну или просто public атрибут, это не принципиально, бо как поток его должен только читать).
В основной программе кидаешь на форму таймер и, например, с задержкой 250 мс (Interval) пишешь примерно такой код:
Код:
procedure TMainForm.Timer1Timer(Sender : TObject);
var
I : Integer;
ctrlState : Boolean;
begin
Timer1.Enabled := False;
ctrlState := Odd(GetKeyState(VK_CONTROL));
// Тут проходим по всем потокам (я не знаю как ты хранишь на них ссылки) и устанавливаем свойство
// Пусть ссылки на потоки хранятся в массиве MyThreads : Array Of TMyThread
For I := Low(MyThreads) To High(MyThreads) Do
MyThreads[i].CTRL := ctrlState;
Timer1.Enabled := True;
end;