Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для calculon
14 / 14 / 2
Регистрация: 18.07.2012
Сообщений: 79

Зависание потоков при обращени к ListBox

27.08.2012, 08:54. Показов 1719. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся со следующей проблемой. Есть основная форма приложения. Есть рабочие потоки. В качестве логера им передается адрес ListBox'a на основной форме. При входе в поток и выходе из него в лог вносятся соответсвующие записи (при этом разумеется используются критические секции). Так вот если пытаться корректно завершить работу потока передачей ему соответсвующего флага и ждать его через WaitForSingleObject() то программа попросту виснет. Дебаг показал что происходит это это при входе в pListBox->Items->Add(). Если эту строчку убрать все работает как часы. Есть ли соображения по этому поводу? Да, заранее всем спасибо...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.08.2012, 08:54
Ответы с готовыми решениями:

Зависание контрола DataGridView при добавлении Row из других потоков
На форме имеется грид с 4 колонками. Существует класс, в котором несколько потоков выполняют определённый метод и при нужном условии...

Как при обращени в адресной строке через id сменить стиль?
Всем привет! Помогите пожалуйста с небольшим скриптом. Сделать нужно следующее. У нас на сайте есть некий блок с id="vip"....

Зависание потоков, утечка памяти
Есть класс который собирает E-mail'ы с веб страницы. package examples; import java.util.regex.Matcher; import...

13
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.08.2012, 01:29
Используй класс TThread

Подробней в этой книге http://www.ozon.ru/context/detail/id/5009785/
0
6 / 6 / 0
Регистрация: 11.04.2011
Сообщений: 130
28.08.2012, 05:12
из потока нельзя обращаться на прямую к VCL, поэтому и висяки
0
 Аватар для calculon
14 / 14 / 2
Регистрация: 18.07.2012
Сообщений: 79
28.08.2012, 05:34  [ТС]
[QUOTE=Avazart;3395273]Используй класс TThread

А чем плох обычный вызов CreateThread? TThread ведь просто обертка...
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.08.2012, 14:59
Цитата Сообщение от calculon Посмотреть сообщение
А чем плох обычный вызов CreateThread? TThread ведь просто обертка...
Этим
Цитата Сообщение от ree4 Посмотреть сообщение
из потока нельзя обращаться на прямую к VCL, поэтому и висяки
В TThread есть для этого синхронизация... да и просто удобнее...

( Точнее не VCL, а видимым компонентам, от TWinControl )
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
28.08.2012, 17:31
Avazart, а не в курсе, почему начиная именно с TWinControl? Что там такого ввели, что возникают конфликты доступа?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.08.2012, 17:37
Ну TWinControl этож базовый всех оконных? Или я не прав?

Добавлено через 4 минуты
Хотя видимо не прав... - TControl
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
28.08.2012, 18:17
Насколько можно судить по справочным описаниям, TWinControl вводит свойства и методы для работы именно с визуальными элементами, которые предоставляет операционка. Это его основное отличие от предков.

А откуда знаешь, что синхронизация нужна только для потомков TWinControl, а не для всех объектов VCL?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.08.2012, 18:24
Архангелький пишит для всех визуальных...

Оно то по логике и понятно что для всего, что участвует в перерисовке окна...

Добавлено через 3 минуты
Из справки
TControl

Controls are visual components, meaning the user can see them and possibly interact with them at runtime. All controls have properties, methods, and events that describe aspects of their appearance, such as the position of the control, the cursor or hint associated with the control, methods to paint or move the control, and events that respond to user actions.

TControl has many protected properties and methods that are used or published by its descendants.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
28.08.2012, 18:34
Да, TControl вводит функционал для работы с некими визуальными компонентами, однако там нет и намека на работу с оконными элементами операционки.
Еще вопрос, что Архангельский под этим подразумевает...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
28.08.2012, 18:41
Синхронизация нужна для non thread-safe объектов. TControl еще является потокобезопасным. И, соответственно, его наследники, если написаны правильно, могут быть потокобезопасны (тогда с ними можно работать без Synchronize).

А вот TWinControl уже сам не thread-safe, то есть, все его потомки по определению не могут быть безопасны => только с синхронизацией.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.08.2012, 18:52
Цитата Сообщение от BRcr Посмотреть сообщение
Еще вопрос, что Архангельский под этим подразумевает...
Походу я ошибся... не в Архангельском видел( пересмотрел не там такого )

Коментарии при создании наследника TThread
C++
1
2
3
4
5
6
7
8
9
10
11
//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(&UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall TMyThread::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
Т.е.- все же все VCL

Но я имел ввиду, то что все визуальные компонеты могуть "заняты" для обрабатки событий в основном потоке например при передвежении курсора над компонентом или при разворачиивании окна и его перерисовке.

Но это не значит что обычные объекты VCL не нужно синхронизировать, просто вероятно, что можно это делать другими способами например через критические секции.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
28.08.2012, 20:11
Короче, если суммировать, то Synchronize() требуется только для объектов, которые могут быть заняты в случайное время без ведома программиста - в результате активности операционки по большей части. Вся VCL под это определение, в принципе, подпадает.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
28.08.2012, 23:25
вся VCL под это определение, в принципе, подпадает.
Ну а зачем например синхронизировать Synchronyze() такие объекты как TStringList или IdHTTP ...
Тут нужно смотреть по общей картине...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.08.2012, 23:25
Помогаю со студенческими работами здесь

Зависание потоков. Работа с файлами
Всем еще раз привет. Очень прошу помощи. Пишу на С++ под винду, с учетом специфики проекта выбор остановился на boost library. Пишу...

Выдача информации в 4 listbox из 4 потоков
Приветствую! Имеется следующая непонятная проблемка. Я написал программу запросов к базе данных, она работает в 4 потока и...

Возможно ли при выборе через opendialog заносить в ListBox имена файлов, а при чтении из ListBox получать путь к файлам?
Возможно ли при выборе через opendialog заносить в ListBox имена файлов, а при чтении из ListBox получать путь к файлам?

Доступ к элементам управления (DGW, ListBox) из потоков
Под элементами управления имею в виду datgaridview, listbox и т.д. В общем подскажите в какую сторону "копать"?

При выделении строки в ListBox отображать ее в Edit, где можно отредактировать и заменить в ListBox-е
Подскажите пожалуйста как зделать задачку:При выделении строки в поле ListBox даная строка отображалась в Edit, где можна его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru