Главная страница
    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.033 c
4-1120660154
_Ivan
2005-07-06 18:29
2005.08.28
Как перехватить завершение работы Windows ?


4-1121180798
NeoMaster
2005-07-12 19:06
2005.08.28
ReadDirectoryChagesW в сервисе


11-1106216023
Эдик
2005-01-20 13:13
2005.08.28
Refresh и дополнительная форма


4-1120551660
Vrit
2005-07-05 12:21
2005.08.28
Как получить информацию об удаленной машине


3-1121763638
vigo
2005-07-19 13:00
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский