powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Исключение в TMonitor.Wait
19 сообщений из 19, страница 1 из 1
Исключение в TMonitor.Wait
    #39560835
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго дня.
Пишу TMonitor.Wait, иногда валится с исключением EMonitorLockException Object lock not owned. Падает по понятным причинам. У инстанса класса не всегда был выполнен 'вход' TMonitor.Enter. Пока что просто 'отключил' исключение EMonitorLockException с помощью try except.
Вопрос: можно и нужно ли с этим что-то делать?
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561162
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дико извиняюсь, но напоминает анекдот про беспокоящий Гондурас.
То есть, возникает исключение, потому что не был выполнен вызов, и на вопрос "что с этим делать" ответ вроде однозначный: выполнить вызов.
Или я чего-то не понял ?
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561176
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

Вызов TMonitor.Enter не всегда необходим. А TMonitor.Wait нужно вызывать всегда (в деструкторе класса). Я заранее не знаю, вызывался ли TMonitor.Enter или нет. Нужно либо ставить дополнительный флаг, чего не хотелось бы. Либо возможно как-то это можно сделать самим TMonitor'ом. Пока что лучшего пути, чем покрешить TMonitor и словить исключение, не нашел. В общем-то, вроде бы нормально работает.
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561212
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
if not TryEnter then Wait ?
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561219
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi, падать будет гораздо реже, но зависать - чаще
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561231
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00ch,

что-то мне тоже так кажется ) зависания, понятно, абсолютно недопустимы.

Глобально, стоит задача дождаться конца 'занятости' инстанса и его разрушить. Инстанс обычного класса. Может быть 'занят' как основным потоком, так и дополнительными. TMonitor, вроде бы, справляется. Была критическая секция, работало хуже. Код не мой. Я бы, возможно, вообще по-другому сделал. Но не хочу всё переписывать.
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561240
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonВопрос: можно и нужно ли с этим что-то делать?по логике - нет, ведь метода TryWait не существует, а ошибки, которые могут возникать при синхронизации, надо обрабатывать. раз TMonitor генерит исключения - юзаешь блок try/except, при критических секциях у WaitForSinglObject тоже ведь надо проверять коды возврата - никто не говорит, что это говнокод))
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561482
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А проводил кто-то тесты TMonitor и критической секции. Есть подозрение, что крит секция может работать быстрее
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561507
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUпроводил кто-то тесты TMonitor и критической секции. Есть подозрение, что крит секция может работать быстрее https://www.delphitools.info/2013/06/06/tmonitor-vs-trtlcriticalsection/
http://blog.therealoracleatdelphi.com/2013/08/monitoring-monitor_23.html
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561547
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUА проводил кто-то тесты TMonitor и критической секции. Есть подозрение, что крит секция может работать быстрееНасколько помню в XE5 или его апдейте пофиксили быстродействие TMonitor - теперь он вровень или быстрее
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561548
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan,

Крит секция в 13 раз быстрее? )
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561556
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger, разве, не просто баг там пофиксили?
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39561600
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chwhite_nigger, разве, не просто баг там пофиксили?Что именно ты хочешь понять?
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39562212
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чего тогда TMonitor не реализовали поверх критической секции? )
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39562213
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonschi,

Вызов TMonitor.Enter не всегда необходим. А TMonitor.Wait нужно вызывать всегда (в деструкторе класса). Я заранее не знаю, вызывался ли TMonitor.Enter или нет. Нужно либо ставить дополнительный флаг, чего не хотелось бы. Либо возможно как-то это можно сделать самим TMonitor'ом. Пока что лучшего пути, чем покрешить TMonitor и словить исключение, не нашел. В общем-то, вроде бы нормально работает.Следующая задача видимо будет такая - не работает FreeMem, который всегда должен вызываться в деструкторе класса. При этом GetMem не всегда необходим, поэтому и не вызывается. Как решить проблему падения освобождения памяти, потому что использовать всякие там флаги не хочется из за (вставить отмазку)?
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39562215
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUА чего тогда TMonitor не реализовали поверх критической секции? )
Для кого ссылки-то давали:
With just that one simple change, TMonitor is matching and even sometimes now exceeding the performance of the Windows critical section. On the whole, I’d declare them equivalent. This does, however, mean you will need to explicitly set the spin count on the TMonitor to some value. Normally the “right” value is a guess based on empirical testing for your specific use case. I suspect the Windows critical section code selects some value based on the number of cores and CPU speed. At some point, I'll need to research an algorithm that can automatically select a reasonable spin count.

There is one thing I can say that TMonitor has over the Windows critical section… it works on all platforms (Windows, MacOS, iOS, and soon Android). Feel free to use whichever one you feel more comfortable using for your specific situation. Me? I will fully admit I’m biased…
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39562419
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2Следующая задача видимо будет такая - не работает FreeMem, который всегда должен вызываться в деструкторе класса. При этом GetMem не всегда необходим, поэтому и не вызывается. Как решить проблему падения освобождения памяти, потому что использовать всякие там флаги не хочется из за (вставить отмазку)?

Да, близко к этому
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39562577
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2,

будут какие-то конкретные проблемы? или так чисто - абы языком ляпнуть?
...
Рейтинг: 0 / 0
Исключение в TMonitor.Wait
    #39562610
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi,

Петросян, перелогинься
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Исключение в TMonitor.Wait
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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