IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> вопросы по потокам....
Snake_B
сообщение 16.09.2010 23:25
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


проведите кто-нибудь ликбез по потокам ))

такие вот вопросы... есть у меня в программе функции обработки картинок... если их вынести в отдельные потоки, будут ли задействованны вторые там ядра у новых процессоров?
(под делфи 2005)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 20.09.2010 0:40
Сообщение #2


Гость






Цитата
Это в идеале, так то ты и на одноядерном можешь сколько хочешь потоков создать
А теперь - внимание, вопрос: А сколько это - в пределах разумного? smile.gif Сколько потоков я могу создать в своей программе? Но это оффтоп, отвечать можно в теге Hide, если что...

Теперь по теме:
Цитата
по хорошему получается надо определять индивидуально сколько этих самых
"число ядер * количество процессоров" есть и столько потоков создавать... так?
По хорошему - получается, что ПРОСТО ТАК создавать ничего не надо, тем более на одноядернике. Увеличить скорость не получится однозначно, скорость только уменьшится, зачем тебе проблемы? Определяй количество ядер/процессоров на машине (если что - можно прочесть системную переменную NUMBER_OF_PROCESSORS), и создавай поток(-и), обрабатывающие информацию только если это число больше 1. Больше конкретики, если можно, что за потоки, какую задачу выполняют? Чего ты вдруг решил что-то выносить в отдельный поток?

Цитата
сейчас ещё есть отправка отчетов всяких на e-mail... программа во время отправки зависает...
Программа зависает по какой причине? Потому что долго выполняется и потом, когда отправится - все-же "отвисает"? Или зависло, и с концами? Если "отвисает" - то выноси в отдельный поток.

Цитата
но если сделать в потоке, я же его остановить не смогу если что? или смогу?
Если "что"? Поток должен сам знать, когда ему завершиться, а когда - нет. Когда завершится - тогда и завершится. Если правильно напишешь Execute - будет работать правильно. Откуда ты собрался "если что" его останавливать?

Добавлено через 1 мин.
Цитата
Попробуй int64..
Не надо... Опять нарушаем сигнатуру функции?
Цитата
DWORD WINAPI GetTickCount(void);
, вот и пользуй DWORD...
 К началу страницы 
+ Ответить 
Snake_B
сообщение 20.09.2010 1:22
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 20.09.2010 9:40) *

Теперь по теме:
По хорошему - получается, что ПРОСТО ТАК создавать ничего не надо, тем более на одноядернике. Увеличить скорость не получится однозначно, скорость только уменьшится, зачем тебе проблемы? Определяй количество ядер/процессоров на машине (если что - можно прочесть системную переменную NUMBER_OF_PROCESSORS), и создавай поток(-и), обрабатывающие информацию только если это число больше 1. Больше конкретики, если можно, что за потоки, какую задачу выполняют? Чего ты вдруг решил что-то выносить в отдельный поток?


программа сжимает изображения в папке... решил выносить, чтобы на многоядерных работала (сжимала) быстрее...

Цитата(volvo @ 20.09.2010 9:40) *

Программа зависает по какой причине? Потому что долго выполняется и потом, когда отправится - все-же "отвисает"? Или зависло, и с концами? Если "отвисает" - то выноси в отдельный поток.


не.... потом нормально отвисает... как отправит... оно в общем не критично, просто счас с gprs сижу и оно заметно... а так вроде нормально...
а выносить в поток... а если за это время пользователь закроет программу... ладно... думаю и так нормально...

Цитата(volvo @ 20.09.2010 9:40) *

Если "что"? Поток должен сам знать, когда ему завершиться, а когда - нет. Когда завершится - тогда и завершится. Если правильно напишешь Execute - будет работать правильно. Откуда ты собрался "если что" его останавливать?


там просто сейчас ни чего нет, просто форма с надписькю "отправка".... а если делать работу с интерфейсом, то надо делать "отмену"... возюкатся долго, а смысла особого нет, тем более что ну очень уж реко она используется...

Цитата(volvo @ 20.09.2010 9:40) *

Добавлено через 1 мин.
Не надо... Опять нарушаем сигнатуру функции?
, вот и пользуй DWORD...


гм... а я уже переделал... работает всё...
а с DWORD опять поплыло куда то... не верные значения выдает...
может уж, работает, да и фиг с ним? ))

Сообщение отредактировано: Snake_B - 20.09.2010 1:24
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Snake_B
сообщение 11.10.2010 12:17
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской

Репутация: -  0  +


и снова вопросы ))
не совсем про потоки... но думаю тему отдельную создавать не стоит...

есть программа... RedForce.SB – мод для игры Civilization 4: Beyond The Sword (Эпоха огня)...
сначала в программе выбираем необходимые изменения, потом генерируется мод...
используется:

1 копирование файлов:
function WindowsCopyFile(FromFile, ToDir : string) : boolean; // Внутренняя функция...
var F : TShFileOpStruct;
begin
result:=true;
F.Wnd := 0;
F.wFunc := FO_COPY;
FromFile:=FromFile+#0;
F.pFrom:=pchar(FromFile);
ToDir:=ToDir+#0;
F.pTo:=pchar(ToDir);
F.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
result:=ShFileOperation(F) = 0;
end;


2. обрабатываются XML файлы...
так как когда начинал делать парсеры не нашел, то сделал так: в скрытый Tmemo считывается содержание файла, потом с ним идёт работа... так как так получалось довольно медленно, каждый раз приходись искать по всему файлу, то сделал, чтобы при открытие XML-файла в другом TMemo создавался список начальных(~) тегов... и при внесении изменений уже поиск нужной строки шел только в нужном блоке... скорость значительно выросла...

это как введение))
теперь вопросы...

1. эта функция копирования создает стандартное окно копирования Windows... и активирует его... так как генерация довольно долгая, то пользователь может заниматься чем то другим... а это активное окно копирование открывается с выделенной по умолчанию кнопкой "отмена"... и если не заметишь и нажмешь Enter, то копирование сбрасывается...
можно как-нибудь (по проще чтобы))) сделать, чтобы это окно при создании не становилось активным?

п.с. так... видимо сам нашел... "FOF_SILENT"

2. Собственно это основной вопрос...
пришли отзывы от пользователей о времени генерации, вот такие:

Цитата
Процессор Core2Duo 2.53 2-ух ядерный, мод генерировался не менее 40 минут
Проц дуал коре 2.20 - 32 мин. (виндовс виста)
Core 2 Duo E6750 2,66GHz - не меньше часа. (виндовс XP SP2)
Сгенерировал , по часам 9 минут - Athlon !! x3 2.8 ghz. Win 7


и в чём собственно заковыка.... вот это про мой комп:
Цитата
У меня центрино (одноядерный) 2,13 ггц с включением всех настроек генериует 15 минут... виндовс XP SP3

т.е. получается что на двухядерных процессорах с большей частотой мод генерируется минимум в два раза медленнее... что это может быть за фигня и как с ней бороться?

п.с. делфи 2005... если что...

Сообщение отредактировано: Snake_B - 11.10.2010 12:21
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Snake_B   вопросы по потокам....   16.09.2010 23:25
volvo   Будут. И вторые, и третьи, и четвертые. Этим заним...   17.09.2010 0:25
Snake_B   Будут. И вторые, и третьи, и четвертые. Этим зани...   17.09.2010 0:55
Snake_B   Будут. И вторые, и третьи, и четвертые. Этим зани...   19.09.2010 13:56
volvo   Сколько нужно, столько и создавай. Потоки - они не...   19.09.2010 14:16
Snake_B   Сколько нужно, столько и создавай. Потоки - они н...   19.09.2010 23:54
Unconnected   На одноядерном ускорится что-то вряд ли, просто уд...   20.09.2010 0:24
volvo   А теперь - внимание, вопрос: А сколько это - в пре...   20.09.2010 0:40
Snake_B   Теперь по теме: По хорошему - получается, что ПРО...   20.09.2010 1:22
Snake_B   и снова вопросы )) не совсем про потоки... но дума...   11.10.2010 12:17
мисс_граффити   а "узкое место", думаешь - процессор? не...   11.10.2010 12:40
Snake_B   а "узкое место", думаешь - процессор? н...   11.10.2010 12:47
TarasBer   > программа сжимает изображения в папке... А п...   11.10.2010 19:36
Snake_B   > программа сжимает изображения в папке... А ...   12.10.2010 0:28
TarasBer   У меня тут нет DRKB и канал маловат, чтоб лишние 1...   12.10.2010 8:33
Snake_B   > Кстати, алгоритм из DRKB умеет бороть лесенки...   12.10.2010 23:26
volvo   Вопрос не в оптимизации, если что. Вопрос - почему...   12.10.2010 10:07
Snake_B   Здесь дело в другом. Видно, какие-то системные фу...   2.01.2011 15:52
TarasBer   > Так что тут надо смотреть всю программу, а не...   12.10.2010 10:29
volvo   Я надеюсь, хотя бы BeginUpdate/EndUpdate для Memo ...   2.01.2011 16:11
Snake_B   Я надеюсь, хотя бы BeginUpdate/EndUpdate для Memo...   2.01.2011 16:31


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 14.07.2025 19:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"