|
|
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
asutp2 какие хэндлы передавать в MsgWaitForMultipleObjects (которых нет) при каждой итерации в нормальном режиме работы?) Похоже азы при работе с потоками где-то были пропущены и попытка подвести к пониманию этого вывода вызывает отторжение. Твой подход - в корне неверен, но виноват в этом на самом деле delphi, т.к. они сделали кривую обертку над сервисом, которая позволяет так делать. Но эта обертка позволяет сделать и чуть лучше. В данном случае в MsgWaitForMultipleObjects должен передаваться хэндл события - TEvent в дельфи. Им можно управлять (выставлять и сбрасывать) из любого потока. Их так же можно сделать несколько и дергать любой из них. Один - для работы, другой - для завершения потока и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 12:43 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
Barmaley57 asutp2 Соответственно, а какие хэндлы передавать в MsgWaitForMultipleObjects ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 12:52 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
Почему-то вспомнилосьПостовой (останавливает машину): Сержант Петров! Прошу документы! Водитель: Добрый день! Постовой: Документы ваши! Права! Водитель: И не говорите. Очень жарко. Постовой: Права! Водитель: А? Постовой: Вы плохо слышате? Водитель: Гововите громче. Постовой (орет): Вы нарушили правила! Ваши права! Водитель: Вы правы, очень жарко. Я весь мокрый. А вы? Постовой: Вы что, глухой? Какой знак висит? Знак висит какой? Водитель: Где? постовой: Вон, наверху! Водитель: Я вижу, я не глухой! Постовой: Красное с желтым наверху для чего повешено? Водитель: Кстати, там что-то висит, надо снять - отвлекает. постовой: Посередине на желтом фоне, что чернеет такое красное? Водитель: Громче, очень жарко! Постовой: Вы глухой? Водитель: Я плохо вижу. Постовой: Глухой, да еще и слепой, что ли? Водитель: Не слышу! Постовой: Как же вы за руль сели? Водитель: Спасибо, я не курю. Да вы не волнуйтесь. Вон в машине двое. Один видит, другой слышит! А я рулю. Постовой: Черная стрелка направо зачеркнута. Это что значит? Не слышу. Водитель: Вы что, глухой? Зачеркнута? Наверное, поставили, потом зачеркнули. Постовой: Вы в своем уме? Это значит, направо поворачивать нельзя. Водитель: Кто вам сказал? Постовой: Я что, по-вашему, идиот? Водитель: Вы много на себя берете. Куда я, по-вашему, повернул? Постовой: Повернули направо. Водитель: Да вы что? Я повернул налево. Вы просто не тем боком стоите. Постовой: Господи! Где у вас лево? Водитель: Вот у меня лево. Вот левая рука, вот правая. А у вас? Постовой: Эта рука никогда не была левой. Водитель: Не говорите глупостей! Это надо знать. Вот левая! Вот правая! Неужели вы этого не проходили? А еще регулировщик! Просто вы не тем боком стоите. Постовой: Тьфу! Хорошо, вон идет прохожий, спросим у него. У нас еще не все идиоты. Товарищ! Ответьте: какая рука левая, какая правая? Прохожий: Первый раз слышу! Постовой: Не иначе в сумасшедшем доме день открытых дверей. Какая ваша левая рука, какая правая? Прохожий: Лично у меня эта рука левая, а это правая. Или с сегодняшнего дня переименовали? Водитель: А вы не верили, товарищ сержант. Видите, у нас руки совпадают, а у вас перепутаны. Постовой (недоуменно разглядывает свои руки): Ничего не понимаю! Прохожий: Я могу идти? Постовой: Идите, идите. Прохожий: Куда? Постовой: Идите прямо, никуда не сворачивая, и уйдите отсюда подальше! Прохожий: Спасибо, что подсказали. А то я два часа иду, не могу понять, куда! (Уходит) Водитель: Вам что-то нужно делать с руками. Я никому не скажу, но при вашей работе могут быть неприятности. Постовой: И я про вас никому. Езжайте! Да, когда свернете налево, ну вы-то направо, там проезд запрещен, обрыв. Но вам туда можно!!! (c) Семен Альтов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 12:59 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
wadman asutp2 какие хэндлы передавать в MsgWaitForMultipleObjects (которых нет) при каждой итерации в нормальном режиме работы?) Похоже азы при работе с потоками где-то были пропущены и попытка подвести к пониманию этого вывода вызывает отторжение. Твой подход - в корне неверен, но виноват в этом на самом деле delphi, т.к. они сделали кривую обертку над сервисом, которая позволяет так делать. Но эта обертка позволяет сделать и чуть лучше. В данном случае в MsgWaitForMultipleObjects должен передаваться хэндл события - TEvent в дельфи. Им можно управлять (выставлять и сбрасывать) из любого потока. Их так же можно сделать несколько и дергать любой из них. Один - для работы, другой - для завершения потока и т.п. И чем дальше, тем более понятно, что большинство из присутствующих не понимают о чем вообще идет речь. Мы что, обсуждаем работу порождаемых потоков, реализующих какой то полезный функционал? Нет. Речь идет о TServiceThread и о его методе Execute, о его загрузке процессора. Рекомендую для начала почитать стековерфлоу, изучить исходники в самой делфи, статистику и примеры применения sleep в потоках. А уже потом нести ахинению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 13:00 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
asutp2 А уже потом нести ахинению. Понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 13:02 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
wadman asutp2 А уже потом нести ахинению. Понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 13:06 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
asutp2, сервис ведь что-то делает? Принимает запросы по сети или еще что-то. Ну вот эти события, которых он ожидает, могут порождать события, events. Это так - из общих соображений, сервисы не писал. Но прием данных по сети, когда поток ждет, а приход данных в буфер сокета активирует событие, и для ожидания используется функция WaitForMultipleObjects, такое было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 13:39 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
asutp2А я думал, ты мне расскажешь о возможных TEvent у сервиса, которые "не любые", а конкретные и известные, ведь мы, еще раз напомню, говорим о сервисе Windows Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Но и это дублирует код в самом менеджере сервисов. Поток с OnExecute - не нужен. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 13:45 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
asutp2 Рекомендую для начала почитать стековерфлоу, изучить исходники в самой делфи, статистику и примеры применения sleep в потоках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 14:18 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
asutp2 wadman пропущено... Понятно. Нужно понимать, что люди тут отвечают исключительно из альтруистических соображений и не все готовы бесконечно поддерживать тупиковую ситуацию на плаву. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 14:22 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
Нужно понимать, что когда речь заходит об омонимах (Windows Event и Delphi Event в данном случае), люди начинают тупить и стоять на своём. PS: А ещё свою лепту вносят event-ы, приходящие в https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nc-winsvc-lphandler_function_ex ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 14:45 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
asutp2 а зачем мне вообще повторять код обертки, если всё сведется к тому же самому? TService и TServiceThread со своей задачей справляются, поэтому не вижу вообще никакой необходимости писать аналогичный код Казалось бы, для однопоточных сервисов можно было бы использовать поток ServiceExecute, чтобы не порождать свой. Но у меня таких (однопоточных) не бывает, у меня минимум два потока (даже в тестовых сервисах) - логгер и рабочий поток. А обычно - логгер, обновлятор, и несколько рабочих потоков, которые занимаются своими делами. И вот такая архитектура: при старте я эти потоки в нужном порядке запускаю, при стопе - в нужном порядке убиваю. А использование ServiceExecute ломает эту прозрачную архитектуру, как минимум. Потому, отвечать на вопрос, как обойтись в ServiceExecute без Sleep - даже не хочется. Но, понятное дело, что обойтись можно и нужно с помощью Wait-функций, если уж используешь этот поток. Ну и последнее. Ты там приводил "заплюсованный код" со слипом со стэковерфло. Этот код - убожество, я его даже цитировать не хочу. Плюсовали его либо в шутку, либо нубы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 14:55 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
YuRockИ вот такая архитектура: при старте я эти потоки в нужном порядке запускаю, при стопе - в нужном порядке убиваю. А использование ServiceExecute ломает эту прозрачную архитектуру, как минимум. "Чо?" Что там у тебя сломается если в начале кода ServiceExecute ты создашь все нужные дополнительные потоки, а в конце из убьёшь? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 14:57 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov YuRockИ вот такая архитектура: при старте я эти потоки в нужном порядке запускаю, при стопе - в нужном порядке убиваю. А использование ServiceExecute ломает эту прозрачную архитектуру, как минимум. "Чо?" Что там у тебя сломается если в начале кода ServiceExecute ты создашь все нужные дополнительные потоки, а в конце из убьёшь?Ничего не изменится, кроме ввода дополнительного хвента и его ожидания. В том-то и дело. Лишняя писанина и меньшая наглядность. И так и так нужны Start и Stop, так зачем же еще событие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 15:01 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
asutp2 _Vasilisk_ Уже неоднократно говорили: про ServiceExecute забыть вообще. В ServiceStart запускать свой поток, в ServiceStop его останавливать Сервис в фоне выполняет задачи. Эти задачи могут быть выполнены одним, двумя, восемью и т.д. потоками... Это неважно сколько их будет.. Важно что сервис в определенное время или по определенным событиям выполняет задачи.. И важно чтобы задачи не ждали друг друга, а были конкурентными (и как частный случай - параллельными) Стандартный Execute для этой цели не подходит... Вот и все.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 15:06 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
X-CiteСтандартный Execute для этой цели не подходит... Вот и все.. Ну ёёёё... TService вызывает последовательно OnStart и OnExecute. Ты в самом деле видишь большую разницу в создании дополнительных потоков на одну строчку кода выше?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 15:14 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
спорите о том чей фломастер вкуснее... разница не велика, просто используя стандартный Execute надо придерживаться его стандартов (заглянуть в исходники), не забывать вызывать ProcessRequests(false)? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. или Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ну и поток пуск стоп не забыть... вся разница! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 15:15 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
А давайте поговорим о использовании ресурсов процессора)) Почему sleep(100)? Почему не 1,10,1000,10000....? Откуда эта цифра взялась? Давайте посмотрим на переключения контекста в счетчиках производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 15:40 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
Zeliusпросто используя стандартный Execute надо придерживаться его стандартов (заглянуть в исходники), не забывать вызывать ProcessRequests(false)? А зачем вообще его вызывать? Только потому, что так написано индусами в совершенно тупом примере кода?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 15:46 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Zeliusпросто используя стандартный Execute надо придерживаться его стандартов (заглянуть в исходники), не забывать вызывать ProcessRequests(false)? А зачем вообще его вызывать? Только потому, что так написано индусами в совершенно тупом примере кода?.. По большому счету только для SERVICE_CONTROL_INTERROGATE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 15:50 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, потому что это как ProcessMessages для VCL, все сообщения сервису поступают через него (пуск, стоп, пауза... см. TServiceThread.ProcessRequests). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 15:50 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
"Чо?" В самой винде они поступают прямо в вышеназванный callback из отдельного потока, а дельфиские приложения вдруг требуют плясок с вызовом какой-то левой хрени?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 15:54 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
Zelius Dimitry Sibiryakov, потому что это как ProcessMessages для VCL, все сообщения сервису поступают через него (пуск, стоп, пауза... см. TServiceThread.ProcessRequests). Приходят через указанный при инициализации службы коллбэк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 15:57 |
|
||
|
пустой Service кушает до 15% ресурсов CPU
|
|||
|---|---|---|---|
|
#18+
YuRock ServiceExecute - это просто событие-коллбэк. Без его описания и тем более "вызова" - сообщения типа "старт/стоп/пауза" отлично приходят. Приходят через указанный при инициализации службы коллбэк. А разве, если не назначить OnExecute, сервис не завершится сам сразу после запуска?.. Ну примерно как обычный TThread, если у него не перекрыть Execute(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2021, 16:12 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40053546&tid=2037492]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 509ms |

| 0 / 0 |
