![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание обекта в потоке (Thread)
Tonich © (2006-07-04 01:26:00)Доброй ночи..
Такой вопрос, а в чем собственно различие между созданием объекта в Create и Execute класса TThread. При создании объекта в том или ином месте на выходе имею различные результаты.
Спасибо...
begin...end (2006-07-04 18:38:00) [61]> Пусик © (04.07.06 18:19) [43]
Это почему же "не пойдёт"?
Разве к объекту можно обращаться только из потока, в котором объект был создан? Вовсе необязательно.
Вы в [40] привели пример класса, экземпляры которого, по-Вашему, будут себя вести по-разному в зависимости от того, в каком потоке они созданы? Привели.
Так вот -- просьба привести пример, подтверждающий то, что экземпляры одного и того же класса, созданные в разных потоках, в одних и тех же условиях ведут себя по-разному.
Пусик (2006-07-04 18:35:00) [62]
> DrPass © (04.07.06 18:21) [44]
> > Пусик © (04.07.06 18:19) [43] Delphi под рукой есть?
> Попробуй, а?
Попробовать что?
DrPass (2006-07-04 18:21:00) [63]
> Пусик © (04.07.06 18:19) [43]
Delphi под рукой есть? Попробуй, а?
Пусик (2006-07-04 18:19:00) [64]
> begin...end © (04.07.06 17:30) [42]
> > Пусик © (04.07.06 17:25) [40]Ок, прекрасно. Итак, СОЗДАЁМ
> два экземпляра TMyClass в РАЗНЫХ потоках -- основном и дополнительном.
> Теперь ОБРАЩАЕМСЯ к этим объектам из ОДНОГО потока (главного).
>
Не пойдет.
Обращение к объекту должно быть из того потока, в котором он создан.
begin...end (2006-07-04 17:30:00) [65]> Пусик © (04.07.06 17:25) [40]
Ок, прекрасно. Итак, СОЗДАЁМ два экземпляра TMyClass в РАЗНЫХ потоках -- основном и дополнительном. Теперь ОБРАЩАЕМСЯ к этим объектам из ОДНОГО потока (главного).
Просьба описать различия в поведении объектов при этом. Если не трудно.
Пусик (2006-07-04 17:29:00) [66]
> > Игорь Шевченко © (04.07.06 17:13) [35]
За пост [24] прошу прощения, конечно. Но не более того.
Хочу заметить, что букварь используют по назначению не только ламеры и чайники.
За сим можно закончить.
Пусик (2006-07-04 17:25:00) [67]
> И какие мне нужны усилия, чтобы это объект вел себя неодинаково
> в зависимости от создавшего его потока?
TMyClass=class
Canvas: TCanvas:
// и т.д.
end;
DrPass (2006-07-04 17:19:00) [68]
> Пусик © (04.07.06 17:17) [38]
>
> Сомневаюсь насчет любой функциональности
Игорь Шевченко в отношении вас прав на 100% :-)
Пусик (2006-07-04 17:17:00) [69]
> Более того, я могу навернуть в него любую функциональность,
> и он все равно будет вести себя одинаково.
Сомневаюсь насчет любой функциональности.
DrPass (2006-07-04 17:15:00) [70]
> Пусик © (04.07.06 17:08) [33]
> Вопрос не о том, что для того, чтобы объект вел себя одинаково,
> нужно затратить дополнительные усилия при его использовании,
> а в том, что такие усилия вообще нужны.
> И совсем необязательно коверкать код, чтобы получить подобные
> эффекты
Хотите аргументов? Да пожалуйста:
type
TMyClass = class
end;
И какие мне нужны усилия, чтобы это объект вел себя неодинаково в зависимости от создавшего его потока? Более того, я могу навернуть в него любую функциональность, и он все равно будет вести себя одинаково.
А вот чтобы он вел себя неодинаково... вот тут уже нужно будет действительно прилагать усилия.
> Процедуры и потоки - суть разные вещи. Не надо передергивать
Вещи разные. А вот смысл утверждений в обоих случаях совершенно одинаков.
И еще раз, плиз, см.
> Здесь не суд, поэтому выискивать "юридические лазейки" в
> определениях и правилах не стоит
Пусик (2006-07-04 17:15:00) [71]
> Игорь Шевченко © (04.07.06 17:13) [35]
> Пусик © (04.07.06 16:43) [27] > Вместо конкретного опровержения
> опять словоблудие.Да сдалось ты мне - опровергать тебя.
> Таблеток от хамства побольше купи, ламер.
Спасибо на добром слове, модератор.
Просьба не соваться больше в подобные ветки, так как пользы от тебя в них нет, а только попытки с высоты своего положения давить на других.
Игорь Шевченко (2006-07-04 17:13:00) [72]Пусик © (04.07.06 16:43) [27]
> Вместо конкретного опровержения опять словоблудие.
Да сдалось ты мне - опровергать тебя. Таблеток от хамства побольше купи, ламер.
Пусик (2006-07-04 17:10:00) [73]
> DrPass © (04.07.06 16:57) [32]
> > Пусик © (04.07.06 16:49) [29] > >DrPass © (04.07.06
> 16:16) [25]> Описание несколько отличается от твоего. Верно?
> И чем оно противоречит моему? Тем, что Рихтер сказал "потоки
> исполняют код и манипулируют данными"? Это допущение для
> более простого понимания. Не более того. Поток физически
> ничем не манипулирует. Манипулирует процессор, а поток описывает
> его состояние.
Хм. Как я понимаю, все зависит от процессора, а не от операционной системы?
Пусик (2006-07-04 17:08:00) [74]
> DrPass © (04.07.06 16:53) [31]
Начну с последнего предложения:
> Здесь не суд, поэтому выискивать "юридические лазейки" в
> определениях и правилах не стоит.
1. В дискусси следует аргументировать свои слова по возможности как более точными высказываниями, причем желательно правдивывми.
> Хм... и как по-твоему, это какое-то отношение имеет к самим
> объектам, или все-таки является причиной сознательного коверканья
> кода программы?
Поведение объекта в разных потоках может отличаться. С этим будешь спорить?
Если нет, тогда продолжу.
Вопрос не о том, что для того, чтобы объект вел себя одинаково, нужно затратить дополнительные усилия при его использовании, а в том, что такие усилия вообще нужны.
И совсем необязательно коверкать код, чтобы получить подобные эффекты.
> Твое утверждение равноценно утверждению "использование объектов
> в процедурах на букву А отличается от использования объектов
> в процедурах на букву В"
Процедуры и потоки - суть разные вещи. Не надо передергивать.
> Да, можно специально написать такой объект, использующий
> глобальную переменную, которой будет присваиваться разное
> значение в разных процедурах... но к общим правилам использования
> объектов это никакого отношения не имеет. Это просто "кривые
> ручки программиста".
Речь не идет о глобальных переменных, и ты это прекрасно понимаешь.
Классы могут быть разного назначения, в том числе и для взаимодействия с пользователем(к примеру), скрывающие в себе и использующие ACtiveX, Com-объекты..
И, естественно, кривые ручки программиста здесь ни при чем, так как разговор не об этом идет.
DrPass (2006-07-04 16:57:00) [75]
> Пусик © (04.07.06 16:49) [29]
> >DrPass © (04.07.06 16:16) [25]
> Описание несколько отличается от твоего. Верно?
И чем оно противоречит моему? Тем, что Рихтер сказал "потоки исполняют код и манипулируют данными"? Это допущение для более простого понимания. Не более того. Поток физически ничем не манипулирует. Манипулирует процессор, а поток описывает его состояние.
DrPass (2006-07-04 16:53:00) [76]
> Пусик © (04.07.06 16:43) [27]
> использование некоторых объектов в доп. потоке отличается
> от использования в основном потоке
Хм... и как по-твоему, это какое-то отношение имеет к самим объектам, или все-таки является причиной сознательного коверканья кода программы?
Твое утверждение равноценно утверждению "использование объектов в процедурах на букву А отличается от использования объектов в процедурах на букву В". Да, можно специально написать такой объект, использующий глобальную переменную, которой будет присваиваться разное значение в разных процедурах... но к общим правилам использования объектов это никакого отношения не имеет. Это просто "кривые ручки программиста".
Здесь не суд, поэтому выискивать "юридические лазейки" в определениях и правилах не стоит.
Пусик (2006-07-04 16:50:00) [77]+ "В главе 4 я говорил, что процесс фактически состоит из двух компонентов объекта ядра "процесс" и адресного пространства так вот, любой поток тожс состоит из двух компонентов.
объекта ядра, через который операционная система управляет потоком Там же хранится статистическая информация о потоке;
стека потока, который содержит параметры всех функций и локальные пере менные, необходимые потоку для выполнения кода (О том, как система управ ляет стеком потока, я расскажу в главе 16) "
Пусик (2006-07-04 16:49:00) [78]>DrPass © (04.07.06 16:16) [25]
Описание несколько отличается от твоего. Верно?
Пусик (2006-07-04 16:48:00) [79]>DrPass © (04.07.06 16:16) [25]
> А поток - это именно состояние процессора.
Не буду писать от себя, проще процитировать того же Рихтера:
"...В той же главе 4 я упомянул, что процессы инертны Процесс ничего не исполня ет, он просто служит контейнером потоков Потоки всегда создаются в контексте какого-либо процесса, и вся их жизнь проходит только в его границах На практике это означает, что потоки исполняют код и манипулируют данными в адресном про странстве процесса Поэтому, если два и более потоков выполняется в контексте од ного процесса, все они делят одно адресное пространство Потоки могут исполнять один и тот же код и манипулировать одними и теми же данными, а также совместно использовать описатели объектов ядра, поскольку таблица описателей создается нс в отдельных потоках, а в процессах..."
Пусик (2006-07-04 16:43:00) [80]
> Это все хорошо, но каким образом это относится к сабжу ?
А все таким же. Те же самые и все о том же. Вместо конкретного опровержения опять словоблудие.
Объект есть данные и реализация обработки их.
И использование некоторых объектовв доп. потоке отличается от использования в основном потоке вследствие именно реализации обработки данных и в взаимодействия с другими объектами.
Сколько раз эту фразу повторить?