int runHour = System::Int32::Parse(sHour);
bool rantoday = false;
而循环则如下所示:
stopping = false;
while (!stopping)
{
if (DateTime::Now.Hour == runHour && !rantoday)
{
//执行相应的任务
rantoday = true;
}
else
rantoday = false;
Threading::Thread::Sleep(loopsleep);
}
因为到了事先约定的时间,只想要上述代码运行一次,因此,在服务执行完相应的任务之后,必须把rantoday标志设为true,只要在其他时间,都会被设为false。
你可以在服务中查找数据库的新记录、或查找过期的文件并删除它们,当然,在服务中可以做的事情远远不只这些。但不管要执行的任务是什么,都需要告诉其他人你做过什么,因为服务不具备一个用户界面,所以也不能弹出一个消息框,因此,使用事件日志是一个不错的方法。
请在mainLoop()的循环之前加入以下代码,以用于设置事件日志记录:
Diagnostics::EventLog* log ;
if (! Diagnostics::EventLog::SourceExists("CGNotifierService") )
Diagnostics::EventLog::CreateEventSource("CGNotifierService",CGNotifierLog");
log = new Diagnostics::EventLog("CGNotifierLog");
log->Source = "CGNotifierService";
虽然不用同时设置日志和源代码,但这样做的话,消息会在服务器浏览器的事件日志之下,创建它们自己的节点。
为向日志中写入,通常只需一行代码--可把它放在"执行相应任务"的注释之后: log->WriteEntry("服务的运行时间到了。",
Diagnostics::EventLogEntryType::Information);
现在,我们大功告成:一个可以安装、卸载、启动、停止,并每天向事件日志中写入一条信息的服务诞生了!从此以后,你将无坚不摧,用C++编写的Windows服务可不像其他那些 .NET应用程序,它只局限于你的想像力。另外,在创建服务工程时,还要注意分清C++与VB及C#之间的细微差别。还等什么呢,赶快动手啊!






