Делаю лабораторную работу. Нужно создать программу, которая будет реализовывать со стороны сервера разные функции (создание документа, обновление документа, обновление метаданных, и т.д.), но сервер должен представлять из себя службу винды. Сам сервер уже был написан, и все, вроде, правильно работал, но когда приступил к работе со службами, произошел конфуз, служба видимо в какой-то момент виснет, после чего я не могу подключиться к серверу со стороны клиента (с помощью pipe).
Код создания сервиса:
void WINAPI ServiceMain(DWORD argc, LPTSTR argv[]){
hService = RegisterServiceCtrlHandlerEx(ServiceName, HandlerEx, NULL);
ssServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
ssServiceStatus.dwCurrentState = SERVICE_RUNNING;
ssServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP |
SERVICE_ACCEPT_SHUTDOWN;
ssServiceStatus.dwWin32ExitCode = 0;
ssServiceStatus.dwServiceSpecificExitCode = 0;
ssServiceStatus.dwCheckPoint = 0;
ssServiceStatus.dwWaitHint = 0;
SetServiceStatus(hService, &ssServiceStatus);
while (!bServiceStopFlag)
{
//cout << ("Wait client\n");
*md.DocName = { 0 };
*md.Author = { 0 };
*md.id = { 0 };
DWORD dwThreadId = 0;
//while (true) {
HANDLE pipe =
CreateNamedPipeA(
pipename,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
512,
512,
5000,
NULL);
if (pipe == INVALID_HANDLE_VALUE)
{
cout << ("CreateNamedPipe failed, GLE=%d.\n", GetLastError());
return ;
}
if (ConnectNamedPipe(pipe, NULL))
{
cout << ("Client connected\n");
HANDLE thread;
thread = CreateThread(
NULL, // no security attribute
0, // default stack size
InstanceThread, // thread proc
(LPVOID)pipe, // thread parameter
0, // not suspended
&dwThreadId); // returns thread ID
if (thread == NULL)
{
cout << ("CreateThread failed, GLE=%d.\n", GetLastError());
return ;
}
else CloseHandle(thread);
}
else
CloseHandle(pipe);
//}
}
Sleep(1000);
ssServiceStatus.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus(hService, &ssServiceStatus);}
DWORD WINAPI HandlerEx(DWORD dwControl, DWORD dwEventType, LPVOID lpEventData, LPVOID lpContext)
{
switch (dwControl)
{
case SERVICE_CONTROL_SHUTDOWN:
case SERVICE_CONTROL_STOP:
ssServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
ssServiceStatus.dwCheckPoint = 0;
ssServiceStatus.dwWaitHint = 80000;
SetServiceStatus(hService, &ssServiceStatus);
bServiceStopFlag = true;
break;
case SERVICE_CONTROL_INTERROGATE:
SetServiceStatus(hService, &ssServiceStatus);
break;
}
return 1;
}
Я не понимаю, что именно я делаю не правильно в создании сервиса?
Виртуальный выделенный сервер (VDS) становится отличным выбором
В нескольких примерах на просторах сети можно найти следующие вещиДопустим имеем несколько определений:
Вокруг ведущего стоит N человек, которые пронумерованы по часовой стрелку числами от 1 до NВедущий, начиная с первого отсчитывает M человек...
Пишу несложную базу данных (использую простоtxt файлы) на c++ Вот так выглядят данные в файле
Не могу разобраться почему у меня не работает findText в QWebEnginePage, я точно знаю что текст на странице есть, а он пишет false: