Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.049 c
1-1123650757
gma
2005-08-10 09:12
2005.08.28
Проблема с FastReport


1-1123589386
Tonich
2005-08-09 16:09
2005.08.28
TListItem


4-1120565306
Vallos
2005-07-05 16:08
2005.08.28
возвращаясь к задержкам ...


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


4-1121169826
Piter
2005-07-12 16:03
2005.08.28
Эмуляция нажатий клавиш





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский