проведите кто-нибудь ликбез по потокам ))
такие вот вопросы... есть у меня в программе функции обработки картинок... если их вынести в отдельные потоки, будут ли задействованны вторые там ядра у новых процессоров?
(под делфи 2005)
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
| Snake_B |
Сообщение
#1
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: 0 |
проведите кто-нибудь ликбез по потокам ))
такие вот вопросы... есть у меня в программе функции обработки картинок... если их вынести в отдельные потоки, будут ли задействованны вторые там ядра у новых процессоров? (под делфи 2005) |
![]() ![]() |
| volvo |
Сообщение
#2
|
|
Гость |
Цитата Это в идеале, так то ты и на одноядерном можешь сколько хочешь потоков создать А теперь - внимание, вопрос: А сколько это - в пределах разумного? Теперь по теме: Цитата по хорошему получается надо определять индивидуально сколько этих самых По хорошему - получается, что ПРОСТО ТАК создавать ничего не надо, тем более на одноядернике. Увеличить скорость не получится однозначно, скорость только уменьшится, зачем тебе проблемы? Определяй количество ядер/процессоров на машине (если что - можно прочесть системную переменную NUMBER_OF_PROCESSORS), и создавай поток(-и), обрабатывающие информацию только если это число больше 1. Больше конкретики, если можно, что за потоки, какую задачу выполняют? Чего ты вдруг решил что-то выносить в отдельный поток?"число ядер * количество процессоров" есть и столько потоков создавать... так? Цитата сейчас ещё есть отправка отчетов всяких на e-mail... программа во время отправки зависает... Программа зависает по какой причине? Потому что долго выполняется и потом, когда отправится - все-же "отвисает"? Или зависло, и с концами? Если "отвисает" - то выноси в отдельный поток. Цитата но если сделать в потоке, я же его остановить не смогу если что? или смогу? Если "что"? Поток должен сам знать, когда ему завершиться, а когда - нет. Когда завершится - тогда и завершится. Если правильно напишешь Execute - будет работать правильно. Откуда ты собрался "если что" его останавливать?Добавлено через 1 мин. Цитата Попробуй int64.. Не надо... Опять нарушаем сигнатуру функции?Цитата DWORD WINAPI GetTickCount(void); |
| Snake_B |
Сообщение
#3
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: 0 |
Теперь по теме: По хорошему - получается, что ПРОСТО ТАК создавать ничего не надо, тем более на одноядернике. Увеличить скорость не получится однозначно, скорость только уменьшится, зачем тебе проблемы? Определяй количество ядер/процессоров на машине (если что - можно прочесть системную переменную NUMBER_OF_PROCESSORS), и создавай поток(-и), обрабатывающие информацию только если это число больше 1. Больше конкретики, если можно, что за потоки, какую задачу выполняют? Чего ты вдруг решил что-то выносить в отдельный поток? программа сжимает изображения в папке... решил выносить, чтобы на многоядерных работала (сжимала) быстрее... Программа зависает по какой причине? Потому что долго выполняется и потом, когда отправится - все-же "отвисает"? Или зависло, и с концами? Если "отвисает" - то выноси в отдельный поток. не.... потом нормально отвисает... как отправит... оно в общем не критично, просто счас с gprs сижу и оно заметно... а так вроде нормально... а выносить в поток... а если за это время пользователь закроет программу... ладно... думаю и так нормально... Если "что"? Поток должен сам знать, когда ему завершиться, а когда - нет. Когда завершится - тогда и завершится. Если правильно напишешь Execute - будет работать правильно. Откуда ты собрался "если что" его останавливать? там просто сейчас ни чего нет, просто форма с надписькю "отправка".... а если делать работу с интерфейсом, то надо делать "отмену"... возюкатся долго, а смысла особого нет, тем более что ну очень уж реко она используется... Добавлено через 1 мин. Не надо... Опять нарушаем сигнатуру функции? , вот и пользуй DWORD... гм... а я уже переделал... работает всё... а с DWORD опять поплыло куда то... не верные значения выдает... может уж, работает, да и фиг с ним? )) Сообщение отредактировано: Snake_B - |
| Snake_B |
Сообщение
#4
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: 0 |
и снова вопросы ))
не совсем про потоки... но думаю тему отдельную создавать не стоит... есть программа... RedForce.SB – мод для игры Civilization 4: Beyond The Sword (Эпоха огня)... сначала в программе выбираем необходимые изменения, потом генерируется мод... используется: 1 копирование файлов: function WindowsCopyFile(FromFile, ToDir : string) : boolean; // Внутренняя функция... 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 - |
Snake_B вопросы по потокам.... 17.09.2010 3:25
volvo Будут. И вторые, и третьи, и четвертые. Этим заним… 17.09.2010 4:25
Snake_B
Будут. И вторые, и третьи, и четвертые. Этим зани… 17.09.2010 4:55
Snake_B
Будут. И вторые, и третьи, и четвертые. Этим зани… 19.09.2010 17:56
volvo Сколько нужно, столько и создавай. Потоки - они не… 19.09.2010 18:16
Snake_B
Сколько нужно, столько и создавай. Потоки - они н… 20.09.2010 3:54
Unconnected На одноядерном ускорится что-то вряд ли, просто уд… 20.09.2010 4:24
мисс_граффити а "узкое место", думаешь - процессор? не… 11.10.2010 16:40
Snake_B
а "узкое место", думаешь - процессор? н… 11.10.2010 16:47
TarasBer > программа сжимает изображения в папке...
А п… 11.10.2010 23:36
Snake_B
> программа сжимает изображения в папке...
А … 12.10.2010 4:28
TarasBer У меня тут нет DRKB и канал маловат, чтоб лишние 1… 12.10.2010 12:33
Snake_B > Кстати, алгоритм из DRKB умеет бороть лесенки… 13.10.2010 3:26
volvo Вопрос не в оптимизации, если что. Вопрос - почему… 12.10.2010 14:07
Snake_B
Здесь дело в другом. Видно, какие-то системные фу… 2.01.2011 19:52
TarasBer > Так что тут надо смотреть всю программу, а не… 12.10.2010 14:29
volvo Я надеюсь, хотя бы BeginUpdate/EndUpdate для Memo … 2.01.2011 20:11
Snake_B
Я надеюсь, хотя бы BeginUpdate/EndUpdate для Memo… 2.01.2011 20:31![]() ![]() |
|
Текстовая версия | 6.11.2025 20:46 |