我写一段,你将东西套进去就可以了,这里原来写的是定时服务,,用的是boost::asio库,当然最好看一看boost::asio相关介绍。
#include <iostream>
#include <fstream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#ifdef _WIN32
#include <windows.h>
#endif
class printer
{
public:
printer(boost::asio::io_service &io)
{
........
}
~printer()
{
}
......
};
#ifdef _WIN32
boost::function0<void> console_ctrl_function;
SERVICE_STATUS_HANDLE g_ssh = NULL;
DWORD g_dwStatus = SERVICE_STOPPED;
int g_exitcode;
BOOL WINAPI console_ctrl_handler(DWORD ctrl_type)
{
switch (ctrl_type)
{
case CTRL_C_EVENT:
case CTRL_BREAK_EVENT:
case CTRL_CLOSE_EVENT:
case CTRL_SHUTDOWN_EVENT:
console_ctrl_function();
return TRUE;
default:
return FALSE;
}
}
void SetStatus(DWORD dwStatus)
{
SERVICE_STATUS ss = {
SERVICE_WIN32_OWN_PROCESS,
SERVICE_STOPPED,
SERVICE_ACCEPT_STOP,
NO_ERROR,
0,
1,
5000};
ss.dwCurrentState = dwStatus;
SetServiceStatus(g_ssh, &ss);
g_dwStatus = dwStatus;
}
VOID WINAPI Handler(DWORD dwCtl)
{
switch (dwCtl)
{
case SERVICE_CONTROL_STOP:
console_ctrl_function();
break;
default:
SetStatus(g_dwStatus);
}
}
VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
g_ssh = RegisterServiceCtrlHandler(lpszArgv[0], Handler);
SetStatus(SERVICE_START_PENDING);
try
{
boost::asio::io_service io;
printer p(io);
console_ctrl_function = boost::bind(&boost::asio::io_service::stop, &io);
SetStatus(SERVICE_RUNNING);
io.run();
g_exitcode = EXIT_SUCCESS;
}
catch (std::exception &e)
{
std::cerr << "[EXCEPTION]\t" << e.what() << std::endl;
g_exitcode = EXIT_FAILURE;
}
catch (const char *e)
{
std::cerr << "[EXCEPTION]\t" << e << std::endl;
g_exitcode = EXIT_FAILURE;
}
SetStatus(SERVICE_STOPPED);
}
int main(int argc, char **argv)
{
SERVICE_TABLE_ENTRY arSvc[] =
{
{L"ChinuxTeam TestServ v1.0", ServiceMain},
{NULL, NULL}
};
if (!StartServiceCtrlDispatcher(arSvc))
{
std::cerr << "Start Service Error" << std::endl;
return EXIT_FAILURE;
}
return g_exitcode;
}
#endif
相关文章
- 用 xampp 在 windows/Linux 下搭建代理服务器
- 【解决】mysql本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。启动好后,数据1146问题,找不到表(windows版本,免安装版本)
- Serverless:用微服务架构构建企业级应用程序
- qt修改程序版本号与服务器不符,ubuntu安装多个qt版本--不同qt版本编译同一个程序时出现错误--解决方案...
- C#判断程序是由Windows服务启动还是用户启动
- 使用 Topshelf 结合 Quartz.NET 创建 Windows 服务
- C# 创建、安装和卸载Windows服务程序
- windows 服务器上创建定时任务
- Qt程序Windows部署前打包方法
- 【必杀】为应用程序池“XXX”提供服务的进程在与 Windows Process Activation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。