Здравствуйте, уважаемые эксперты! Подскажите пожалуйста, как поступить: в моей программе используется длительный цикл по вычислениям и обработке файлов. Сам цикл работает нормально. Но когда он работает, все остальные программы, запущенные в этот момент, работать перестают (или очень медленно работают). Использовать потоки нежелательно. Пробовал понижать приоритет самой программы через диспетчер задач (Win2000 Pro), приоритет понижается, ситуация не меняется - все также медленно работает. Может есть ещё какой-нибудь способ? Среда разработки - C++ Builder 5 Большое спасибо всем откликнувшимя.
Доброе время суток, Alexandr! Увы, нечаянно не на ту кнопку при ответе на вопрос № 1581 от читателя Alexandr нажал. Но ничего, отвечу "этому". Все же потоки (с их приритетами, WaitForSingeProcess) будут являться наилучшим решением проблемы. А так ... Timer Вы, видимо, уже пробовали... Но как понял, что во время копирования проблемы? Тогда может писать кусками: захватывать два файла, и по частям через FileStream - работать будет дольше, но может процессор освободит? Ответ отправлен: 31.05.2004, 17:45 Отправитель: Boriss Отвечает CrackLab
Добрый день, Alexandr! А что конкретно вы делаете в цикле что так нагружает процессор? Какой у вас компьютер? Почему не хотите использовать потоки (не думаю что это сильно изменит ситуацию, но попробовать можно)? Ответ отправлен: 31.05.2004, 16:21 Отправитель: CrackLab Отвечает sir henry
Доброе время суток, Alexandr! Вообще-то потоки для подобных случаев и планировались, как средство деления времени процессора между задачами. Примерно, поток - часть времени процесора. Если кроме потоков, то нужно посмотреть, что включено в тело цикла. Может быть есть какая-то опреация, которая и тянет процессор на себя. Ответ отправлен: 31.05.2004, 15:11 Отправитель: sir henry
Вопрос № 1579
Здравствуйте! Есть процедура (в приложении), скачивающая файл с указанного узла и сохраняющая его в текущем каталоге под заданным именем. Но при работе процедуры происходит исключение (I/O Error 1784). Ошибка происходит при работе BlockWrite(f, Buffer, BufferLen). Помогите понять в чем дело, т.к. сам, увы, понять не могу. Спасибо!
Приветствую Вас, Alex! Ну еее! Передайте четвертый параметр ссылка на переменную типа Integer - если он есть, то туда записывается, сколько прочитано (BlockRead) или записано (BlockWrite). Если этого четвертого параметра нет, как у Вас, то и получается ... Ответ отправлен: 31.05.2004, 17:34 Отправитель: Boriss Отвечает CrackLab
Приветствую Вас, Alex! У меня все работает нормально. Проверял на нескольких файлах. Какие параметры вы передаете функции? Ответ отправлен: 31.05.2004, 16:09 Отправитель: CrackLab Отвечает sir henry
Приветствую Вас, Alex! Сообщение к ошибке гласит (winerror.pas) "Ваш буфер не годится для этой операции". Вы уверены что правильно используете BlockWrite()? Если Вы используете для чтения InternetReadFile, то я бы Вам посоветовал для записи его "пару" WriteFile: function WriteFile(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD; var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; Ответ отправлен: 01.06.2004, 06:24 Отправитель: sir henry
Вопрос № 1580
Здраствуйте. Есть один нехороший компонент который проверяет запущена ли Дельфи и если не запущена программа не запускается. Как сделать программу которая будет обманывать этот компонент т.е. притворяться Дельфей.(Или какие-нибудь другие решения). Заранее спасибо.
Доброе время суток, rOOse! Тут несколько путей решения: 1) залезть в компонент - и посмотреть, когда выдается результат проверки с тем, чтобы его исправить. Для этого даже исходного кода не надо - дизассемблер хороший поможет Вам 2) Написать программу, которая имеет имя заголовка как Delphi. Если "тот" компонент проверяет только по имени заголовка (FindWindow), то пройдет 3) посотреть, с помощью FileMon и RegMon - куда обращается компонент, определяя, запущен ли Delphi Ответ отправлен: 31.05.2004, 17:30 Отправитель: Boriss Отвечает CrackLab
Добрый день, rOOse! Есть миллион способов как программа может проверять запущена ли Дельфи. Нужно дизассемблировать программу и смотреть как она это проверяет, а гадать как там происходит проверка - это тыкать пальцем в небо. Ответ отправлен: 31.05.2004, 15:54 Отправитель: CrackLab Отвечает Pawel
Добрый день, rOOse! Это будет зависеть от компонента. Смотря что проверяется и т.д. Ответ отправлен: 31.05.2004, 16:09 Отправитель: Pawel Отвечает CJ
Приветствую Вас, rOOse! А ты сначала узнай каким методом компонент ищет дельфу. Ответ отправлен: 31.05.2004, 16:32 Отправитель: CJ Отвечает sir henry
Здравствуйте, rOOse! Непонятный вопрос. Программа должна обманывать в чем? Что Дельфи запущен (если он не запущен) или что Дельфи не запущен (когда он запущен)? В любом случае надо знать, по какому принципу работает компонент, иначе это будет гадание на кофейной гуще :). Ответ отправлен: 01.06.2004, 06:28 Отправитель: sir henry Отвечает samum2000
Доброго времени суток, rOOse! Я так понял, что речь идет о платной компоненте? Тогда есть несколько путей: 1. Самый "правильный" - это просто заплатить автору денег (он ведь не зря старался). 2. Если хочешь делать эмулятор, посмотри здесь http://dore.on.ru/articles/delphi_crack.zip. 3. Можно пропатчить код компоненты (*.dpl файл в частности), т.е. дизассемблировать его, разобраться что к чему и изменить часть комманд. 4. И, наконец, можно просто пропатчить твой код - т.е. скомпилировать программу и посторить то же, что и в пункте 3, только для *.exe. Внимание! Три последних варианта могут повлечь за собой очень неприятные последствия, особенно если ты будешь распространять свою программу, так что лучше -------------------------- -=Experts helper: testmode=- Ответ отправлен: 02.06.2004, 14:28 Отправитель: samum2000
Вопрос № 1581
Здравствуйте, уважаемые эксперты! По поводу вопроса 1578. Что такое потоки я знаю, применять их умею. Проблема в руководителе нашего отдела, а также прочих сортудниках числом 3 штуки (женщины). Их тоже нужно этому учить, но не хочется. В цикле ничего особенного не происходит, там программа копирует файлы, обрабатывая их (либо архивация, либо переименование) и ждет, пока другая программа (как раз все остальные ее делают) их обработает. После обработки стирается файл-флаг (пока он есть, програма ждет) и происходить перемещение обработанных файлов в каталог для резервных копий. Вот в момент ожидания нагрузка на процессор 100%. На более мощном компьютере положение поправилось (пробовал на Pentium III - 800), но на моем рабочем и тестовом (PII - 333, 128Ram, Win2000Pro) - 100%. Все косятся на меня. А у программы даже интерфейса нет, он и не нужен.
Ответ отправлен: 31.05.2004, 17:38 Отправитель: Boriss Отвечает CrackLab
Здравствуйте, Alexandr! Как происходит ожидание? В цикле проверяется существование файла флага? или как? Ответ отправлен: 31.05.2004, 17:28 Отправитель: CrackLab Отвечает sir henry
Доброе время суток, Alexandr! Тогда нужно внимательно рассмотреть именно момент ожидания, каким образом этот момент организуется. А потоки вещь хорошая. Чтобы убедить в этом остальных, составьте программку-пример, которая фрматирует дискету и копирует большой файл, с графическим представлением прогресса. Клянусь своей треуголкой, эффект будет потрясающий :)). Ответ отправлен: 01.06.2004, 06:34 Отправитель: sir henry
Вопрос № 1582
Доброе время суток! Вопрос: Каким образом реализовать в Delphi проверку существования e-mail (почтового ящика)?
Приветствую Вас, Александр! Понимаете, если бы всё было так просто, то тогда мы не знали бы куда деваться от спама. На самом деле есть команда в протоколе SMTP? которая должна проверять, существует ли такой ящик на сервере, но на большинстве серверов она отключена именно для борьбы со спамом. Так что нам остается только отправить письмо и ждать ответа - если придет что-вроде "this message can't be delivered" - значит не существует. -------------------------- -=Experts helper: testmode=- Ответ отправлен: 03.06.2004, 11:51 Отправитель: samum2000 Отвечает Boriss
Приветствую Вас, Александр! Не нашел как. Видимо только послать и ждать ответа. Как посылать из Delphi интересует. Если "да", то напишите Ответ отправлен: 02.06.2004, 18:52 Отправитель: Boriss
Вопрос № 1583
Уважаемые эксперты! Мне необходимо создать небольшое приложение для работы с XML файлом. Т.е. чтение готового XML и дополнение его данными. Если есть ссылка на внятный пример на основе которого можно было бы разобраться самому буду благодарен за информацию
Приветствую Вас, Алексей! Вот сегодня нашел ссылки книг, но скачать пока не могу :(( а следовательно и скзать, что там http://shelek.org.ru/books/xml/xmlforwww.zip http://shelek.org.ru/books/xml/xmlbyex.zip Ответ отправлен: 02.06.2004, 18:57 Отправитель: Boriss
Вопрос № 1584
В дополнение к вопросу 1581: Для sir henry: Хорошо, напишу. Хотя шансов на успех мало - не пойму. Хотя сегодня как раз появился дируктор, схожу к нему... Может повезёт...
Приветствую Вас, Alexandr! Не понял????? <8-O А если этот файл существует всегда, то прога так из спячки и не выйдет? Надо что-нибудь более подробное :-). Ответ отправлен: 02.06.2004, 00:40 Отправитель: sir henry
Вопрос № 1585
В дополнение к вопросу 1581: Для CrackLab: ожидание происходит в процессе выполнения пустого цикла (см. приложение)
Доброе время суток, Alexandr! Странно, у меня ничего не тормозит при выполнении этого цикла. У меня правда Athlon XP 2200+... Тормозит только само приложении, как бы повисает намертво, но остальная работа ОС никак не замедляется. В любом случае при использовании потока у меня и сама программа стала работать абсолютно нормально. Так что советую попробовать использовать поток для вашего цикла (возможно не только этого, но и всего цикла работы с файлами). Работать с потоками можете либо через API CreateThread либо через готовый класс TThread. Если будут вопросы по потокам - обращайтесь. Ответ отправлен: 01.06.2004, 15:28 Отправитель: CrackLab
Вопрос № 1586
В дополнение к вопросу 1578: Для Boriss: с самим процессом копирования проблем нет - све копируется. Проблема с нагрузкой на процессор (100%) во время ожидания. Само ожидание происходит как в приложении
Добрый день, Alexandr! Не уверен, что нашел истину, но в описании процессора Intel нашел фразу в примечаниях, что команда API Sleep() не дает гарантии, что процессор будет освобожден для других задач :((
Приложение: Ответ отправлен: 01.06.2004, 19:49 Отправитель: Boriss
Добрый день, Лёха! Ошибка номер 32. Ответ отправлен: 01.06.2004, 14:02 Отправитель: vitya Отвечает Boriss
Приветствую Вас, Лёха! Вот только нашел в модуле Windows упоминание: HINSTANCE_ERROR = $20; Но все же Вам придется написать, когда и при каких обстоятельствах Вы получили такое сообщение, если только это Вас интересует Ответ отправлен: 02.06.2004, 19:17 Отправитель: Boriss Отвечает Snowm@n
Приветствую Вас, Лёха! С бусурманского на великий и могучий переводится как "ОШИБКА 32" :) А вообще вопросы надо бы поконкретнее задавать - может быть это ошибка времени выполнения, либо компиляции, либо еще чего... Эксперты же не телепаты :) Ответ отправлен: 01.06.2004, 20:50 Отправитель: Snowm@n Отвечает CJ
Доброе время суток, Лёха! Это ошибка номер 32. :))) Ответ отправлен: 01.06.2004, 16:47 Отправитель: CJ Отвечает sir henry
Здравствуйте, Лёха! А подробнее? Где взяли такое чудо? Ответ отправлен: 02.06.2004, 00:53 Отправитель: sir henry Отвечает samum2000
Приветствую Вас, Лёха! Это ошибка 32. Если хотите знать больше, то напишите где, когда, и при каких обстоятельствах вы с ней познакомились :) Подробнее надо вопросы задавать, тогда и ответы будут подробные. -------------------------- -=Experts helper: testmode=- Ответ отправлен: 02.06.2004, 20:18 Отправитель: samum2000
Вопрос № 1588
Добрый вечер, вопрос : 1) Есть форма на ней грид, где отображен список набранных всеми пользователями документов. Список должен интерактивно обновляться и пополняться созданными документами.Каким образом сделать интерактивное обновление информации там где надо ? (использую IBX-компоненты) Понимаю что будет тормозить при большом количестве записей, но в селекте стоит ограничение на временной диапазон - документы за 1 день. Максимум в день может создаваться 30-35 документов. Я установил на форме Таймер и делаю так : запоминаю текущий ID документа, затем дизэйблконтролс на IBQuery, метод close,метод open, энэйблконтролс и локейтом ищу ID.Понимаю что тормозит но может кто-нить посоветует более разумное решение. Пробовал commitretaining в транзакции, но даже подтвержденные записи не появляются(прочитал в книге, что commitretaining существенно кушает
ресурсы сервера, так ли это ?) Установки транзакции пробовал разные. Помогите разобраться
Здравствуйте, jiny! Думаю, TIBDataSet.Refresh решит Ваши проблемы. Ответ отправлен: 02.06.2004, 01:22 Отправитель: sir henry Отвечает THE_PRO
Добрый день, jiny! Mojet IBTable.Refresh Ответ отправлен: 02.06.2004, 12:37 Отправитель: THE_PRO
Вопрос № 1589
Следующий вопрос : Накладная состоит из 2-х таблиц (шапка(FP1_1) и список к шапке(FP1_2). Так вот : при создании таблицы создаю реальную таблицу на серваке через create(TmpFP1_2), после того как пользователь забивает товары в tmpFP1_2, перебрасываю данные в постоянную таблицу списка (FP1_2), после закрытия окна набора товаров, tmpFP1_2 - уничтожается. Проблема в следующем : пробовал создавать триггеры к TmpFP1_2 через TIBQuery компонету(пробовал и с "SET TERM !!" и без него) - не получается, попробовал через TIbSQL - так же, присоветуйте как создать триггеры "на лету", программно.
Добрый день, jiny! Триггеры создаются не просто так, про запас, а для определеной таблицы. Следовательно, эта таблица уже должна существовать и быть готой к применени. Лишь после этого можно создавать триггеры. Напишите в базе встроенную процедуру, которая: 1. Создает нужную таблицу, 2. Создает триггер для этой таблицы. Ответ отправлен: 02.06.2004, 01:11 Отправитель: sir henry
Вопрос № 1590
Здравствуйте уважаемые эксперты! Как запутстить файл из директории где проект. Спасибо
Здравствуйте, Владимир! А какой именно файл? Поточнее можно. Ответ отправлен: 01.06.2004, 22:51 Отправитель: CJ Отвечает Snowm@n
Доброе время суток, Владимир! WinEXEC, если вы это имели в виду. Ответ отправлен: 01.06.2004, 21:02 Отправитель: Snowm@n Отвечает Boriss
Добрый день, Владимир! ?????????! ShellExecute WinExec CreateProcess .bat - файл или просто щелкнуть на иконке файла :)) Вопрос то формулировать надо ... Ответ отправлен: 01.06.2004, 21:03 Отправитель: Boriss Отвечает sir henry
Доброе время суток, Владимир! Просто запускайте его и все. Или Вас интересует технология запуска экзешника из собственой программы? Ответ отправлен: 02.06.2004, 01:04 Отправитель: sir henry Отвечает THE_PRO
Добрый день, Владимир! WinExec ili ShellExecute "Path" formiruyem tak: ExtractFilePath(Application.Exename)+'FileName.Exe'; Ответ отправлен: 02.06.2004, 12:33 Отправитель: THE_PRO
Вопрос № 1591
Добрый день! Подскажите пожалуйста с чего начать! Дано: Чужой сайт, на котором надо заполнять формы ввода данными через браузер. Как написать прогу на Delphi, которая бы могла брать свои локальные данные(не важно откуда, хоть из текстового файла) и запихивать их в текущее открытое окно браузера в соответствующие им Editы. Если есть исходники аналогичных программ(типа автозаполнялки рег. форм в Инете), то поделитесь пожалуйста ссылкой!
Доброе время суток, Hunter! Если знать, какой протокол используется этой формой ввода, то нет слишком больших проблем. Начните с CGI, POST, GET (описывается в учебниках и др. по Java, например) Ответ отправлен: 02.06.2004, 16:23 Отправитель: Boriss
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.