![]() |
|
|
![]()
|
|
| Bunny |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 22.3.2006 Репутация: 1 Всего: 1 |
Первый раз пытаюсь работать с потоками, поэтому трудно
Проблема такая: создаю поток, функция потока вызывает функцию формы, которая рекурсивно ищет нужные файлы и добавляет их в ListView. Ищет она их нормально, но как только пытается обратиться к списку - вылетает выше написанная ошибка. Понимаю, что ошибка прав доступа, но как исправить Если делать без потока - работает, но поиск в больших папках занимает много времени и во время поиска форма остается недоступной, и кажется что приложение повисло. Не хочется так оставлять, поэтому need help! |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
код показывай
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 11 Всего: 60 |
синхронизация |
|||
|
||||
| Bunny |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 22.3.2006 Репутация: 1 Всего: 1 |
Выкладываю код (его нужную часть)
Это сообщение отредактировал(а) Bunny - 16.8.2006, 20:43 |
||||
|
|||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
если ты только начинающий -- какой, нафик, _beginthreadex?!
используй TThread и его метод Synchronize -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Bunny |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 22.3.2006 Репутация: 1 Всего: 1 |
_hunter, TThread есть только в Билдере, а _beginthreadex можно использовать везде. Попробую TThread, если решит проблему - хорошо, но хотелось бы знать где здесь ошибка!
Попробовал TThread - вылетает таже самая ошибка, вопрос остается открытым. Это сообщение отредактировал(а) Bunny - 17.8.2006, 15:25 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
ага. и TResultsImportForm (точнее TForm) тоже везде есть ;) еслибы ты всю фразу прочитал (про Synchronize я имею в виду)... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
просто _hunter имеет ввиду, что
здесь есть синхронизация А здесь ее самому надо организовывать, ручками.... так что выбирай или то что у борланда , где все за тебя сделали, или то что везде работает , но надо самому поработать! Это почитай хоть и на дельфи но это имхо основы http://forum.vingrad.ru/index.php?showtopic=60076 -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Все вокруг жа около, вот нет что бы сказать человеку:
Все ф-ии которые используют VCL - необходимо помещать в Synchronize; #include <vcl.h> void __fastcall Execute() { Synchronize( MMY_ESSAGE ); } void MMY_ESSAGE() { ShowMessage("TEST"); } -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
по-моему в справке тоже самое написанно...
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Bunny |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 22.3.2006 Репутация: 1 Всего: 1 |
Artemon, именно так и было написано:
Да и как я понимаю синхронизация нужна когда есть несколько потоков, чтобы не допустить одновременного использования общих ресурсов?! А у меня один поток! Может из-за рекурсии? |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 7 Всего: 20 |
Да нипричем тут твоя рекурсия.
синхронизировать нужно всегда с vcl. Покажи новый вариант кода с TThread -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 6 Всего: 24 |
Правда? Считаем... в одном потоке работает VCL, другой поток создаешь ты для необходимых тебе манипуляций... итого потоков: ? -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| Bunny |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 22.3.2006 Репутация: 1 Всего: 1 |
весь остальной код остался прежним. Ошибка таже: "Access violation at addres ..." |
||||
|
|||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
а чем он те не нравится? эта ф-ция без потока вообще работает? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Bunny |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 22.3.2006 Репутация: 1 Всего: 1 |
работает, я об этом уже писал, и во время работы этой функции вся форма недоступна. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
еще код LoadFilesInList() показать не помешалобы...
+ ты о такой полезной штуке как отладчик слышал? ++ ты ссылку Romikgy похоже не читал потому как смысла в этом коде (точнее использования тут потоков) я не вижу... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
_hunter, о какой ссылке речь ? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Bunny |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 22.3.2006 Репутация: 1 Всего: 1 |
Господин, _hunter.
Смысл использования потоков здесь ясен, я даже объяснял зачем он мне тут нужен, и код функции LoadFilesInList() уже приведен выше => делаю вывод, что это Вы не вникаете в тему и не читаете то, что тут уже написано! И свои "замечания" по поводу отладчика оставьте, пожалуйста, у себя. |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
дык просвети меня темного... точнее приведи контр-аргумент к следующей фразе: метод, вызываемый Synchronize() выполняется в основном потоке VCL. откуда вывод: приведенный код полностью аналогичен коду, в котором вызов ResultsImportForm->LoadFilesInList("."); происхоит из обработчика нажатия на какую-нить кнопку... насчет "код функции приведен выше": я считаю что весь код, относящийся к проблеме должен находиться в одном месте. и искать его по двум страницам (или помнить что в этой теме писалось н дней назад) у меня желания нет. по поводу "замечания по поводу отладчика" еслибы ты четко указал строку, вызывающую ошибку -- никаких претензий небылобы... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Bunny |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 22.3.2006 Репутация: 1 Всего: 1 |
_hunter, строку, вызывающую ошибку я указал
Romikgy, "." - поиск в текущем каталоге. Перенес функции поиска и добавления файлов в список в сам класс потока:
Ошибка таже, происходит в UpdateList при обращении к ResultsImportForm->ResultFilesList. _hunter , дублировать код для захламления топика я не буду, а если
Вас никто не заставляет |
||||||||
|
|||||||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 11 Всего: 146 |
* тоже ищет в текущем каталоге не надо те потоки , чесн слово , у тя вся работа идет с формой А глюка вот почему имхо эта переменная у тя в потоке неизвестна, передай при создании потока указатель на твою форму, и внутри потока юзай этот указатель а не саму форму -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 24 Всего: 98 |
"тут" (и "здесь") это, простите, где? на строке с комментарием (строки №1.3 и 3.62 в приведенном листинге)? -- что-то сильно в этом сомневаюсь...
дык берем отладчик и смотрим NULL он (ResultFilesList) или не NULL (кстати эту проверку не помешалобы в код включить) P.S. (насчет захламления) избыточным кодом ты топик захламляеш не меньше... Добавлено @ 13:14 была бы неизвестна -- код бы не скомпилился... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Bunny |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 22.3.2006 Репутация: 1 Всего: 1 |
Romikgy, нужен мне поток
Romikgy, спасибо за идею _hunter тоже спасибо Это сообщение отредактировал(а) Bunny - 21.8.2006, 15:38 |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |