Помогите пож-та, решить такую проблему:
есть основной поток, т.е. создавший главное окно.
Он решает какую-то задачу и задумался надолго.
На клавиши, да и на другие события не реагирует.
Юзеру же необходима возможность отмены той задачи,
которой занимается основной поток (например, построение отчетов)
Он нажимает ESC и хочет оменить всё.
Так вот я создаю 2-ой поток, присоединяю
очередь ввода основного потока к этому
и вхожу в цикл GetMessage. Насколько я понимаю,
все сообщения ввода клавиатурного теперь должны попасть в очередь
2-го потока и он уже отменит задачу.
Выглядит все примерно так:
procedure TBreakThread.Execute;
var
msg: TMsg;
begin
if not AttachThreadInput(MainThreadID,SecThreadId,true) then
exit;
while GetMessage(msg, 0, 0, 0) do begin
case msg.message of
WM_KEYDOWN : какое-то действие
end;
end;
end;
Так вот никаких сообщений GetMessage не возвращает. Непонятно почему.