powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / про потоки и Synchronize
12 сообщений из 12, страница 1 из 1
про потоки и Synchronize
    #32260503
T34
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
T34
Гость
может уже мозги в конце рабочего дня плавятся, но я не уверен в столь простой вещи как то:

Один поток вызывает метод:

MyObj.Method1; // (внутри идет запись в некий глобальный обект Х)

другой поток (т.е. возможно ОДНОВРЕМЕННО(!) с 1-м) вызывает другий метод того же обекта:

Synchronize( MyObj.Method2 ) ; // (внутри идет запись в тот же самый глобальный объект Х)

Будет ли вызов Метода2 ждать завершения выполнения Метода1
(из-за Synchronize) или потоки могут таки столкнутся на почве обьекта Х !? (судя по симптомам похоже так и проиcxодит...)

P.S. Код этого бреда не мой !
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32260605
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проще всего раздели критическими секциями и не парься
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32260918
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это зависит от того, является ли первый поток - потоком GUI (главным). Если да, то Method1 и Method2 гарантировано будут исполнены строго последовательно (а вот кто первый, а кто второй - уверенности нет). Если же нет, то все возможно.
Критические секции - самое правильное решение, если первый поток не является потоком GUI.
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32260945
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaitForSingleObject
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32260947
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dankov
А почему считаешь что с главным потоком так синхронизироваться нельзя? Помойму так никакого криминала. Единственное, под критической секцией не должно быть слишком долгого по исполнению кода, дабы второй поток не притормозил слишком сильно главный и все... или есть еще какие-то проблемы?
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32260960
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Speaker

сигналы, семафоры, мьютексы работают медленнее чем критические секции
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32260972
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StarWind,

Да, согласен. Действительно, в этом случае, наверное,
более полезно использовать критические секции.
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32260977
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему считаешь что с главным потоком так синхронизироваться нельзя? Помойму так никакого криминала. Единственное, под критической секцией не должно быть слишком долгого по исполнению кода, дабы второй поток не притормозил слишком сильно главный и все... или есть еще какие-то проблемы?

Я не говорил, что нельзя. Я говорил "лучше". Это разные вещи.
С главным потоком синхронизироваться лучше через Syncronize, хотя это и медленнее. Причина проста - с главным потоком синхронизируются, в основном, для операций над видимыми контролами, а оперирование контролами из другого потока может произвести глюки. Метод, который выполняется через Syncronize, на самом деле исполняется в контексте главного потока, поэтому вышеупомянутых глюков случиться не должно.
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32261759
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какие глюки, если с окном работа ведется в одном потоке?\r
я тут создал топик вчера, если интересно, то присоеденяйся
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32261861
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какие глюки, если с окном работа ведется в одном потоке?

Если в одном потоке, то проблем нет, но мы же обсуждаем синхронизацию 2-х как минимум потоков.
Давай рассмотрим такую ситуацию. Вот засинхронизировал метод1 и метод2 у контрола, созданного в потоке GUI, через критические сессии. Но кроме этих 2-х методов, есть еще оконнная функция, которая реагирует на виндовые сообщения, и крутится эта функция в вечном цикле в основном потоке. Вот ты из другого потока управляешь этим контролом через метод2. А в этот момент оконная фукция получает WM_PASTE или WM_MOVE или еще чего-нибудь. Это будет исполнено параллельно с методом2, так как, я больше чем уверен, поставить критическую сессию еще и в в оконную функцию ты не догадался (во всяком случае никто так не делает, ибо это чрезмерно). Скорее всего , проблем не возникнет. Но вдруг, обработка сообщения вступит в конфликт с методом2 (типа обращение к одному ресурсу, который должен быть использован монопольно)? Тогда вот и могут быть глюки.
Поэтому, Syncronize, в данном случае предпочтительнее, так как с ним такие проблемы исключены.
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32261944
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dankov
начнем с того что догадался :)
вот пока как прикрутить к оконной функции так чтоб не было много и непонятно написано, пока не знаю...
...
Рейтинг: 0 / 0
про потоки и Synchronize
    #32262018
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше не стоит в оконную функцию вносить элементы синхронизации. Это может привести к тому, что у пользователя может появиться дискомфорт от задержек на перерисовку и реакцию мыши и клавы.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / про потоки и Synchronize
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]