![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Snake_B |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: ![]() ![]() ![]() |
проведите кто-нибудь ликбез по потокам ))
такие вот вопросы... есть у меня в программе функции обработки картинок... если их вынести в отдельные потоки, будут ли задействованны вторые там ядра у новых процессоров? (под делфи 2005) |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Это в идеале, так то ты и на одноядерном можешь сколько хочешь потоков создать А теперь - внимание, вопрос: А сколько это - в пределах разумного? ![]() Теперь по теме: Цитата по хорошему получается надо определять индивидуально сколько этих самых По хорошему - получается, что ПРОСТО ТАК создавать ничего не надо, тем более на одноядернике. Увеличить скорость не получится однозначно, скорость только уменьшится, зачем тебе проблемы? Определяй количество ядер/процессоров на машине (если что - можно прочесть системную переменную NUMBER_OF_PROCESSORS), и создавай поток(-и), обрабатывающие информацию только если это число больше 1. Больше конкретики, если можно, что за потоки, какую задачу выполняют? Чего ты вдруг решил что-то выносить в отдельный поток?"число ядер * количество процессоров" есть и столько потоков создавать... так? Цитата сейчас ещё есть отправка отчетов всяких на e-mail... программа во время отправки зависает... Программа зависает по какой причине? Потому что долго выполняется и потом, когда отправится - все-же "отвисает"? Или зависло, и с концами? Если "отвисает" - то выноси в отдельный поток. Цитата но если сделать в потоке, я же его остановить не смогу если что? или смогу? Если "что"? Поток должен сам знать, когда ему завершиться, а когда - нет. Когда завершится - тогда и завершится. Если правильно напишешь Execute - будет работать правильно. Откуда ты собрался "если что" его останавливать?Добавлено через 1 мин. Цитата Попробуй int64.. Не надо... Опять нарушаем сигнатуру функции?Цитата DWORD WINAPI GetTickCount(void); |
Snake_B |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: ![]() ![]() ![]() |
Теперь по теме: По хорошему - получается, что ПРОСТО ТАК создавать ничего не надо, тем более на одноядернике. Увеличить скорость не получится однозначно, скорость только уменьшится, зачем тебе проблемы? Определяй количество ядер/процессоров на машине (если что - можно прочесть системную переменную NUMBER_OF_PROCESSORS), и создавай поток(-и), обрабатывающие информацию только если это число больше 1. Больше конкретики, если можно, что за потоки, какую задачу выполняют? Чего ты вдруг решил что-то выносить в отдельный поток? программа сжимает изображения в папке... решил выносить, чтобы на многоядерных работала (сжимала) быстрее... Программа зависает по какой причине? Потому что долго выполняется и потом, когда отправится - все-же "отвисает"? Или зависло, и с концами? Если "отвисает" - то выноси в отдельный поток. не.... потом нормально отвисает... как отправит... оно в общем не критично, просто счас с gprs сижу и оно заметно... а так вроде нормально... а выносить в поток... а если за это время пользователь закроет программу... ладно... думаю и так нормально... Если "что"? Поток должен сам знать, когда ему завершиться, а когда - нет. Когда завершится - тогда и завершится. Если правильно напишешь Execute - будет работать правильно. Откуда ты собрался "если что" его останавливать? там просто сейчас ни чего нет, просто форма с надписькю "отправка".... а если делать работу с интерфейсом, то надо делать "отмену"... возюкатся долго, а смысла особого нет, тем более что ну очень уж реко она используется... Добавлено через 1 мин. Не надо... Опять нарушаем сигнатуру функции? , вот и пользуй DWORD... гм... а я уже переделал... работает всё... а с DWORD опять поплыло куда то... не верные значения выдает... может уж, работает, да и фиг с ним? )) Сообщение отредактировано: Snake_B - 20.09.2010 1:24 |
Snake_B |
![]()
Сообщение
#4
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 72 Пол: Мужской Репутация: ![]() ![]() ![]() |
и снова вопросы ))
не совсем про потоки... но думаю тему отдельную создавать не стоит... есть программа... 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 - 11.10.2010 12:21 |
![]() ![]() |
![]() |
Текстовая версия | 14.07.2025 19:06 |