![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,442
|
![]()
Доброго времени суток!
Реализован некий класс который нужно заполнить элементами. Для того я создал поток, который будет заниматься заполнение класса элементами. Но мой класс связан с этим потоком(он его запускает). Вот как это примерно выглядит: ![]() Но я вылетаю в AV при: Код:
Как быть? Не создавать же в потоке ещё один экземпляр класса. Можно ведь передать в поток указатель на класс и работать с этим класом и всеми его свойсвами. Последний раз редактировалось Человек_Борща; 27.02.2012 в 00:04. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 19,042
|
![]()
Из потока вызывается NewItem, который в свою очередь Add, откуда изменятся вмизуальный компонент fLV. А синхронизация где?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,442
|
![]()
Аватар, почему я должен что-то синхронизировать?
Я передаю в поток указатель на класс, и использую его методы. Если все же надо, то как? Последний раз редактировалось Человек_Борща; 27.02.2012 в 01:29. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 19,042
|
![]()
Не важно как, но вы из потока методами вашего класса обращаетесь к ListView. И код этих методов работает в потоке. Вот и используйте синхронизацию при обращении к методам этого класса.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,442
|
![]()
хм возникла мысль, создать свое событие класса с передачей в него record'а с информацией.
Как создать знаю, а вот как со свом параметром, да ещё и положить в этот параметр что-то... как это сделать? Можно пример? Последний раз редактировалось Человек_Борща; 27.02.2012 в 01:54. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 19,042
|
![]()
А чем Synchronize не по душе? Событие класса? Интересно, но уже спать хочется
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#7 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
1. На диаграмме крайне подозрителен pF: ^TFListMgr;
2. Если fLV - это TListView, то Аватар прав - VCL однопоточна. К её объектам нельзя обращаться из других потоков, даже если это иногда может сходить нам с рук.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,442
|
![]()
класс явл. оберткой над потоком и поток работает только с классом(заполняет), вывод на VCL делает сам класс, есть ситуации когда вывод в vcl вовсе не надо. По этому Thread => VCL не выход.
Я создал метод: Код:
1. В реализации TThread OnTerminate вызывается без синхронизации, почему? Код:
p.s. для мен синхронизация конкретно в данном ПО не ритична т.к. будет всего 1 поток и я выношу в него то, что можен помешать юзеру нормально работать с ПО. Последний раз редактировалось Человек_Борща; 27.02.2012 в 02:14. |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,442
|
![]()
решил дело событиями=)
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как удалить объект по указателю на его базовый класс? | AndreyBS | Общие вопросы C/C++ | 5 | 17.04.2011 11:29 |
Описать класс-родитель и класс-потомок. Delphi 7 | Andrew_M | Помощь студентам | 0 | 15.01.2011 14:42 |
Освободить поток. Нужно удалить 1 событие и 1 класс | TwiX | Общие вопросы Delphi | 3 | 26.04.2010 02:23 |
Как создать в Дeлфи класс в DLL для использования его в VC++ | Dmitriy.Ch | Общие вопросы Delphi | 0 | 25.07.2009 08:40 |
В среде Delphi составить программу (процесс), который паралельно запускает два потока (нити) | metamfetamin | Помощь студентам | 9 | 06.11.2007 15:26 |