![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| rodendron |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Добрый день,
перечитал почти весь форум на тему ошибки Code 1400. Сделал вывод, что неверный дескриптор окна случается в случае, только если во время потока появляются сообщения. Но в чем может быть еще проблема, если я относительно окна формы ничего не делаю (даже прогресс бар закометировал и т.д.), но она все равно возникает. У меня работает с помощью Indy парсинг веб страниц. В цикле запускается парсинг 10 страниц. При этом, даже в случае, если во время Http.Get НЕ появляются сообщения(страница не доступна и т.д.), то все равно после успешного завершения возникает эта ошибка. Что я еще могу делать не так? Заранее благодарю вас за ответы по этой теме. Добавлено через 5 минут и 30 секунд Добавлю код: hThread: THandle; ThreadId : DWord;
Добавлено через 8 минут и 31 секунду Причем первый поток, в котором схожие операции, я запускаю по ТОЧНО такой же схеме, и ошибки не возникают. А этот поток я могу запустить как после того, так и отдельно, заполнив страницы. Ошибка возникает в обоих случаях. Если в первом можно было бы еще чего подумать, то вот странно что когда отдельно - тоже. |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
жэсть... из другого потока к форме и копмонентам обращаться... про потокобезопасный код слышали?
-------------------- There are always someone smarter than you... |
|||
|
||||
| rodendron |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
MetalFan,
Да я программист на другом языке, тут пришлось за Делфи взяться, времени на изучение всего как всегда минус месяц. Где я накосячил? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
rodendron, Делфи тут ни при чем. Потоки они и в африке потоки. Думаю нужно начать с этого http://forum.vingrad.ru/index.php?show_typ...76&view=all
Без хорошего понимания работы с потоками проблемы будут постоянно, потому сначала RTFM. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| rodendron |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Alexeis,
Спасибо, я это видел. Времени читать нет - все сроки горят. Ладно, буду сдавать приложение с ошибкой - деваться некуда... Всем спасибо. Я просто думал что причины только в сообщениях. А порядка 60 процедур сейчас нет возможности по отдельности там в поток пихать или как еще. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Шутки шутишь. Такие ошибки часто приводят к потере данных и к полной смерти программы. Добавлено через 45 секунд От такой программы будет больше вреда чем пользы. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| rodendron |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Alexeis,
хм, но какую-то информацию она выводит же все же... У меня там 2 базовых функционала выполняющих примерно одинаковые функции. Так вот, первый работает идеально и без ошибок. А второй то с ошибками, то без ошибок. Вот никак не пойму в чем может быть проблема. Если бы он всегда работал с ошибками, или в первом хоть иногда были, а тут... В 2 словах, хоть что это может быть? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Дело тут
в строчке Form1.StartParse; Добавлено через 2 минуты и 25 секунд вместо вызова функции лучше отправить сообщение одному из окон главного потока. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| rodendron |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Alexeis, я об этом тоже подумал.
А почему тогда тот самый первый случай, о котором я писал, отрабатывает нормально?
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Зависит от того какой метод вызывается. Может просто случайно. В общем случае это не работает. Скажем если метод формы ничего не делает кроме отправки сообщения, то он может отработать без ошибок. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| rodendron |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Alexeis,
Возможно, глупый вопрос, но мне стоит вынести все процедуры за область формы? Или как лучше быть? P.S.: Сейчас на тестах нашел ссылку, по запуску которой возникает эта ошибка. Но пока не могу разобраться что и как. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Текущая проблема в том что происходит одновременный доступ двух и более потоков к одной области данных. Если разрулить то ошибок не будет. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
тогда смысл использования потока в данном случае теряется. необходимо пересмотреть логику работы алгоритмов, учитывая межпотоковое взаимодействие -------------------- There are always someone smarter than you... |
|||
|
||||
| rodendron |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 152 Регистрация: 22.3.2005 Репутация: нет Всего: нет |
Alexeis,
Мда, буду читать теорию. Искать время надо будет, ночью вероятно. Получается, что один поток - в нем несколько операций? Я же просто открываю поток - все делаю, потом его закрываю. Добавлено через 4 минуты и 23 секунды Честно говоря, начнем с того, что мне потоки не нужны - я их стал использовать только ради того, чтобы у меня приложение при объемных процедурах не висело. Чтобы я мог его сворачивать, разворачивать. В общем можете посоветовать мне выпить яду... Я года 2 назад делал подобное довольно весомое приложение, и я его мог сворачивать и разворачивать, при этом статус бар двигался, и ничего не висело. Тут я стал рыться в архивах - не нашел его... Спросил у друга, который еще больший ламер, чем я, мол как мне сделать так, чтобы по нажатии клавиши "Выолнить", у меня приложение не висело, а позволяло нажать клавишу STOP, показывало прогресс бар и т.д. - он мне скинул пример с потоками - сказал что так нужно делать. Может тогда, раз у меня там выполняются 2 громоздкие процедуры ПОСЛЕДОВАТЕЛЬНО(не параллельно), то и не стоит юзать поток? Я кажется тогда делал с помощью Application.Messages или Handle... Блин, как же тяжело каждые 2-3 месяца слезать на разные языки программирования :( Подскажите пожалуйста. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
rodendron, лучше организовать поток так что он получил копии всех необходимых ему данных сразу (или те данные больше никто не должен использовать). И только после этого начинал работу, а после окончания работы второго потока основной поток должен сам "достать" результаты работы дополнительного. Это идеальный вариант, когда никто никому не мешает.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |