![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Тормозит многопоточное приложение (SMTP-сервер) [D6, Win95/98]
hardward © (2002-01-11 07:56:00)Тормозит многопоточное приложение (SMTP-сервер)
Даже при 3-х потоках загрузка системы 99%. Хотя предполагалось использовать 100-200.
Код примерно такой:
Procedure Thr.Execute;
Begin
Echo1.Connect;
…………………..
Str1 := Echo1.ReadLn;
Echo1.Writeln("HELO lis.com");
Str1:= Echo1.ReadLn;
Str1:= Echo1.Echo ("MAIL FROM: "
Дальше идет диалог с SMTP-сервером через Echo1.Echo
Echo1.Disconnect;
End;
nikkie (2002-01-14 13:59:00) [1]загрузка системы 99% при двух потоках - это НЕ нормально
конечно, если внутри потоков крутится просто бесконечный цикл, то получишь эти самые 99%. но если этот цикл, например, выглядит как
while (GetMessage(...)) do begin ... end;
то загрузка будет нормальная по причине того, что пока нет "данных" GetMessage не возвращает управление потоку.
GetMessage в данном случае не причем, конечно. но грамотно организованное чтение из сокета точно также не должно тормозить.
мне кажется проблема - в компоненте (я так понимаю используется TNMEcho - что у него творится внутри можно только догадываться). может имеет смысл попробовать инди? эти компоненты писались с тем, чтобы быть использованными в многопоточных приложениях...
Vlad____ (2002-01-14 13:33:00) [2]Дело в том, что когда потоки работают - они заметно все тормозят, и загрузка системы 99% это нормально даже при двух потоках. Micrisoft не рекомендует использовать много потоков работающих одновременно. Совсем другое дело если использовать торможение потоков ( см. в Делфи TEvent и т.п.) ,например, когда потоку нечего делать и нужно ждать данных из сокета, то TEvent.WaitFor(..) останавливает поток, а когда уже есть данные то TEvent.SetEvent и остановленный поток продолжает работать.
SV (2002-01-13 15:11:00) [3]Или сразу создаешь, про запас многовато потоков.
Fellomena (2002-01-11 12:12:00) [4]Могу предположить (т.к. кода нет), что при работе с потоками ты их синхронизируешь... тогда конечно всё будет тормозить...
Привети код.