Galkov писал(а):
то значит у нас есть уже хотя бы одинВ случае консольного мультипоточного приложения этот поток после запуска полезной работы в параллельных потоках ставится на паузу, чтобы не дать закрыться программе, пока не отработают полезные потоки. А вот регулирование взаимодействия полезных потоков - задача программиста (как и в визуальных приложениях). Метод Synchronize - один из вариантов, и то не самый оптимальный.
Про причины создания консольных приложений - без понятия.
------------ Дoбавленo в 13.15:
Пример консольного MailSlot - сервера: mailslot console server.sha
Пример клиента: mailslot client.sha
Попробуйте поотправлять данные серверу: вы ничего не увидите, так как сервер не работает в консольном приложении.
Внесите следующую поправку в файле hiMailSlot_Server.pas (в процедуре THIMailSlot_Server._OnExec):
#pas
function THIMailSlot_Server._OnExec;
var nBytesRead:cardinal;
begin
while not Sender.Terminated do begin
if ReadFile(ms, str[1], MAXWORD, nBytesRead, nil) then begin
SetLength(str,nBytesRead);
if Applet <> nil then
Sender.Synchronize(SyncExec)
else
SyncExec;
SetLength(str,MAXWORD);
end;
end;
Result := 0;
end;
В консольном примере работает 3 потока. Проблем не заметил (что не отменяет вышеизложенных соображений по работе с потоками в более сложных схемах)
[offtop]PS: отдельно зацените "удобство" метода doCreate в компоненте Events[/offtop]