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

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

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

Глобально, стоит задача дождаться конца 'занятости' инстанса и его разрушить. Инстанс обычного класса. Может быть 'занят' как основным потоком, так и дополнительными. TMonitor, вроде бы, справляется. Была критическая секция, работало хуже. Код не мой. Я бы, возможно, вообще по-другому сделал. Но не хочу всё переписывать.
...
Рейтинг: 0 / 0
29.11.2017, 13:26:14
    #39561240
fd00ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в TMonitor.Wait
makhaonВопрос: можно и нужно ли с этим что-то делать?по логике - нет, ведь метода TryWait не существует, а ошибки, которые могут возникать при синхронизации, надо обрабатывать. раз TMonitor генерит исключения - юзаешь блок try/except, при критических секциях у WaitForSinglObject тоже ведь надо проверять коды возврата - никто не говорит, что это говнокод))
...
Рейтинг: 0 / 0
29.11.2017, 17:41:54
    #39561482
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в TMonitor.Wait
А проводил кто-то тесты TMonitor и критической секции. Есть подозрение, что крит секция может работать быстрее
...
Рейтинг: 0 / 0
29.11.2017, 18:03:56
    #39561507
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в TMonitor.Wait
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
29.11.2017, 18:35:44
    #39561547
white_nigger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в TMonitor.Wait
SOFT FOR YOUА проводил кто-то тесты TMonitor и критической секции. Есть подозрение, что крит секция может работать быстрееНасколько помню в XE5 или его апдейте пофиксили быстродействие TMonitor - теперь он вровень или быстрее
...
Рейтинг: 0 / 0
29.11.2017, 18:35:50
    #39561548
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в TMonitor.Wait
vavan,

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

Вызов TMonitor.Enter не всегда необходим. А TMonitor.Wait нужно вызывать всегда (в деструкторе класса). Я заранее не знаю, вызывался ли TMonitor.Enter или нет. Нужно либо ставить дополнительный флаг, чего не хотелось бы. Либо возможно как-то это можно сделать самим TMonitor'ом. Пока что лучшего пути, чем покрешить TMonitor и словить исключение, не нашел. В общем-то, вроде бы нормально работает.Следующая задача видимо будет такая - не работает FreeMem, который всегда должен вызываться в деструкторе класса. При этом GetMem не всегда необходим, поэтому и не вызывается. Как решить проблему падения освобождения памяти, потому что использовать всякие там флаги не хочется из за (вставить отмазку)?
...
Рейтинг: 0 / 0
30.11.2017, 20:10:20
    #39562215
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в TMonitor.Wait
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
01.12.2017, 10:40:34
    #39562419
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исключение в TMonitor.Wait
asutp2Следующая задача видимо будет такая - не работает FreeMem, который всегда должен вызываться в деструкторе класса. При этом GetMem не всегда необходим, поэтому и не вызывается. Как решить проблему падения освобождения памяти, потому что использовать всякие там флаги не хочется из за (вставить отмазку)?

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

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

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


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