Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Скорость работы 3 потоков


Автор: Garmahis 11.10.2016, 17:10
В приложенном проекте есть thread, который свою работу выполняет за 2 секунды,
если он запущен один (Delphi 7, i5 3,3 GHz 8Gb).

Если запустить их 3, то время работы каждого увеличится до 12 секунд.

Если запустить 3 копии приложения в каждом из которых будет работать 1 поток,
то время работы потока останется в районе 2с.

Требуется заставить 3 потока в одном приложении работать со скоростью 2с.
Уже потерял всякую надежду и планирую использовать несколько процессов.
Время работы потоков пишется в файлы c:\thread_*.txt

Кто сможет заставить 3 потока работать со скоростью одного ? 

Автор: kami 11.10.2016, 22:01
Цитата(Garmahis @  11.10.2016,  17:10 Найти цитируемый пост)
Кто сможет заставить 3 потока работать со скоростью одного ?  

Минус вам. Виртуальный. За:
1. Спихивание на других своей задачи. Допустим, много кто на форуме сможет. Но кому это надо?
2. Плохо разобранная проблема. А вернее - вообще не разобранная. Код не документирован, с использованием указателей (зачем? Вы работаете в D3 - D7?), кучей непонятных вычислений (думаете, кому-то будет интересно разбирать это всё?), объявления массивов на 380 метров (вы не слышали о динамических массивах? и о дженериках?) при использовании только 100 кб... В общем, даже начало чтения кода уже снижает желание помочь до минимума.

P.S. Резко? Возможно. Но какая постановка вопроса - такой и ответ. Спасибо, хоть не "ну-ка быстро всё бросили и сделали так, чтобы код работал так быстро, как мне надо".

Автор: DYUMON 12.10.2016, 06:48
ошибка в 16 строке

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Skorost-raboty-3-potokov-id57fcf332adbd5f329b7a0782#findElement_E7045_57fdb28986c4c506c92a6341_0

Автор: dnek 12.10.2016, 13:08
Попробуйте повысить приоритет Вашего процесса:
Код

  SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);

или повысить приоритет потока
Код

[Поток].Priority := tpTimeCritical


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Skorost-raboty-3-potokov-id57fcf332adbd5f329b7a0782#findElement_E7045_57fe0b9986c4c50f074e9eef_0

Автор: Garmahis 13.10.2016, 10:21
dnek, большое спасибо! Я разобрался smile Была проблема с менеджером памяти при выполнении StrPCopy.
kami, вас никто не заставляет никому помогать. Поэтому не стоит писать если у вас нечего сказать по делу.

Автор: kami 14.10.2016, 18:47
Цитата(Garmahis @  13.10.2016,  10:21 Найти цитируемый пост)
не стоит писать если у вас нечего сказать по делу. 

Я говорил именно по делу.
Прежде чем написать - я скачал ваши исходники и попробовал разобраться. Несмотря на явно приказной (вернее "на слабо") тон в постановке вопроса. Обратите внимание, что счетчик скачиваний = 1, т.е. я единственный, кто вообще прикоснулся к вашим исходникам.
Только после поверхностного анализа структуры приложения я понял, что глубже лезть и искать причину нет смысла. О чем и написал.

На всякий случай - переформулирую: если вы хотите помощи - обращайтесь именно за помощью. Показывая при этом, что вы сами сделали для решения проблемы. Дабы помогающие видели - вы не халявщик, просто в данном аспекте не хватает знаний. Прикладывая не тонну своего кода а-ля "разгребите тут всё", а минимальный воспроизводимый пример.

В исходной постановке ваш вопрос расценивается именно как сообщение от халявщика, который уверен, что все вокруг ему должны.

Кстати, предложение dnek, мягко говоря, не особенно то и хорошее. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)