Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

остановка сервиса.   Найти похожие ветки 

 
SergeyDon   (2005-07-12 15:23) [0]

запускаю сервис в котором стартует дополнительный поток считает там разную ерунду, в ServiceExecute ожидаю завершение этого потока: WaitForMultipleObjects(3,...,INFINITE);
когда поток обработал пробуждаемся и идем дальше!
Вопрос в момент когда выполняется ожидание WaitForMultipleObjects
система не реагирует на Stop как правильно остановить выполнение serviсe?. (точнее реагирует постановкой в очередь сообщений силнала Stop, и останавливает когда произошло пробуждение основного потока.)


 
BiN ©   (2005-07-12 15:30) [1]

Организовать ожидание в другом потоке.


 
Lamers   (2005-07-12 15:38) [2]

to BiN ©
а смысл еще поток плодить?
может просто INFINITE заменить но 100 , это даст возможность обрабатывать очередь.


 
Digitman ©   (2005-07-12 15:41) [3]

MsgWaitForMultipleObjects

тем самым Msg ты сделаешь трэд сервиса реагирующим на поступающие в его адрес сообщения, в т.ч. стоп-сигнал

др.вопрос что, даже отреагировав на это сообщение и обработав его, нужно таки все равно дождаться завершения того самого доп.трэда ... только в этом случае ожидание необходимо будет перенести в обработчик OnStop


 
SergeyDon   (2005-07-12 15:51) [4]

to Digitman:
поставил:

msgWaitForMultipleObjects(2,PWOHandleArray(Eventsarray),false,INFINITE,QS_INPUT);
QS_INPUT - обробатывать также входные сообщения в очереди.

вылетает с ошибкой WAIT_FAILED, GetLasterror = 6


 
BiN ©   (2005-07-12 15:51) [5]

Lamers   (12.07.05 15:38) [2]

а смысл еще поток плодить?
может просто INFINITE заменить но 100 , это даст возможность обрабатывать очередь.


Проблемы могут возникнуть при необходимости ожидания на какой-нибудь период отличный от 100 или INFINITE (например 3000).

В любом случае в [3] уже дано оптимальное решение для TServiceApplication.


 
BiN ©   (2005-07-12 15:54) [6]

SergeyDon   (12.07.05 15:51) [4]

вылетает с ошибкой WAIT_FAILED, GetLasterror = 6


The handle is invalid.


 
Digitman ©   (2005-07-12 15:56) [7]


> SergeyDon   (12.07.05 15:51) [4]


и я по-твоему должен гадать на кофейной гуще, что у тебя есть PWOHandleArray и что есть Eventsarray ?

И почему в оригинальном варианте в массиве ивентов было 3 элемента, а в msg-варианте вдруг их стало 2 ?


> QS_INPUT


ставь QS_ALLINPUT - не ошибешься


 
SergeyDon   (2005-07-12 16:00) [8]

to Bin:

что это может значить?
изменил одну строчку, остальной код прежний.
вылетает сразу, кнопку stop  не нажимаю.


 
Digitman ©   (2005-07-12 16:06) [9]


> изменил одну строчку, остальной код прежний


даже если бы ты правильно изменил одну строчку, этого недостаточно для реализации сабжа

под реакцией на сообщения подразумевается немедленное "пробуждение" трэда, "спящего" на wait-вызове, всякий раз когда очередт сообщений трэду (и/или его окнам) непуста ... а выбирать/диспетчеризовать/обрабатывать эти сообщения кто за тебя будет ? Пушкин ?

см. TServiseThread.ProcessRequests()


 
SergeyDon   (2005-07-12 16:09) [10]

в первом посте 3 набрал случайно там 2 потока.

EventsArray:array of THandle; //масив Handle`ов потоков

PWOHandleArray - это приведение масива EventsArray к требованию SDK

все разабрался в MsgWaitForMultipleObjects это должен быть просто указатель на масив Handle`ов, а не преобразованный.
но все равно Stop срабатывает после окончания работы потока.


 
Digitman ©   (2005-07-12 16:24) [11]


> EventsArray:array of THandle; //масив Handle`ов потоков


это динамический массив !!

переменная, его определяющая, есть суть указатель на управляющую структуру масива, а не на собственно данные элементов массива


> PWOHandleArray - это приведение масива EventsArray к требованию
> SDK


в SDK нет ни слова ни  про какие-то там динамические массивы.



Страницы: 1 вся ветка

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
4-1121060219
NeoMaster
2005-07-11 09:36
2005.08.28
Синхронные и асинхронные запросы


4-1121334928
IceBeerg
2005-07-14 13:55
2005.08.28
Установка даты.


3-1121764781
Андрей Жук
2005-07-19 13:19
2005.08.28
Баг в DCL Firebird 1.5.2


1-1123270317
Muller
2005-08-05 23:31
2005.08.28
Не открывается файл Reset ом


1-1123408733
Senti
2005-08-07 13:58
2005.08.28
Помогите новичку. Как массивы символов складывать....