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

Вниз

TServiceApplication и два TService   Найти похожие ветки 

 
Igor_ ©   (2005-04-30 02:40) [0]

Мне нужно написать приложение, в котором будут несколько сервисов. Я с сервисами раньше не сталкивался, поэтому для тестирования написал сервис, который запускает поток а тот просто вызывает Beep - здесь было все ОК.
Приведу исходники (писано на BCB6)

поток:

//----------------------------------------------------
__fastcall DbGuardSrvcThead::DbGuardSrvcThead(bool CreateSuspended, int mSecs, int uType)
   : TThread(CreateSuspended)
{
   _mSecs = mSecs;
   _uType = uType;
}
//----------------------------------------------------
void __fastcall DbGuardSrvcThead::Execute()
{
   while (!this->Terminated){
       MessageBeep(_uType);
       Sleep(_mSecs);
   }
}
//----------------------------------------------------

И собственно сервис:

__fastcall TdBGuardService::TdBGuardService(TComponent* Owner)
: TService(Owner)
{
}
//----------------------------------------------------
TServiceController __fastcall TdBGuardService::GetServiceController(void)
{
return (TServiceController) ServiceController;
}
//----------------------------------------------------
void __stdcall ServiceController(unsigned CtrlCode)
{
dBGuardService->Controller(CtrlCode);
}
//----------------------------------------------------
void __fastcall TdBGuardService::ServiceStart(TService *Sender,
     bool &Started)
{
   _workThead = new DbGuardSrvcThead(true, 10000, MB_ICONHAND);
   _workThead->Priority = tpNormal;
   _workThead->FreeOnTerminate = true;
   _workThead->Resume();
   Started = true;        
}
//----------------------------------------------------
void __fastcall TdBGuardService::ServiceStop(TService *Sender,
     bool &Stopped)
{
   _workThead->Terminate();
   Stopped = true;
}
//----------------------------------------------------
void __fastcall TdBGuardService::ServicePause(TService *Sender,
     bool &Paused)
{
   _workThead->Suspend();
   Paused = true;
}
//----------------------------------------------------
void __fastcall TdBGuardService::ServiceContinue(TService *Sender,
     bool &Continued)
{
   _workThead->Resume();
   Continued = true;
}
//----------------------------------------------------


В этом случае все работает на ура.
Я добавил еще один сервис (сделал его полностью аналогичным, только имя поменял)
Тут начались непонятные для меня вещи.

И первый и второй сервис запускаются нормально. Когда я пытаюсь остановить (или поставить на паузу) второй сервис - сообщение приходит почему-то к первому (запускал отладчик) первый останавливается, а Windows выдает сообщение, что не может остановить 2-й сервис.

1-й сам по себе, даже если работает 2-й нормально запускается и ставится на паузу,останавливается.
2-й даже если работает сам, все равно глючит: не может поставиться на паузу, вроде останавливается - при этом окошко остановки висит, пока его руками не закроешь...

В общем, какая-то фигня..

Может кто-нибудь знает, что это такое? Или есть какие-нибудь идеи..


 
Digitman ©   (2005-04-30 14:29) [1]

совесть имей, да ?
форум предполагает Делфи-код, а ты оперируешь BCB-кодом ..

а проблема как минимум здесь :

void __fastcall TdBGuardService::ServiceStop(TService *Sender,
    bool &Stopped)
{
  _workThead->Terminate(); //здесь ты просто взвел флаг, предписывающий некоему своему трэду workThead принять меры к завершению, но отнюдь не завершающий этот трэд немедленно !
  Stopped = true; //и тут же, ничтоже сумняшеся, отвечаешь, мол, все в порядке, мол, все мои ВНУТРЕННИЕ "дела" по команде "стоп" безусловно завершены на сей момент (хотя workThead скорей всего как работал так и продолжает работать !)
}



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

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

Наверх




Память: 0.45 MB
Время: 0.117 c
4-1115586895
Wer
2005-05-09 01:14
2005.06.29
Del programm


14-1117710930
Andy BitOff
2005-06-02 15:15
2005.06.29
MakeCab.exe


6-1112079741
Гость
2005-03-29 11:02
2005.06.29
Реально ли отправить данные ...


14-1117802870
syte_ser78
2005-06-03 16:47
2005.06.29
NOD 32


14-1117675849
Dyakon_Frost
2005-06-02 05:30
2005.06.29
Геометрия на плоскости





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский