就是用向导建立一个Service Application,然后在TService1模块框中放入Timer,双击Timer,加入下面的代码,ok!
void __fastcall TService1::Timer1Timer(TObject *Sender)
{
ShowMessage("hello");
}
//-----------------Top
楼上的,你说的这个,估计都知道啊!但是你试了吗?按照你说的,把工程编译一下,然后把Service1.exe安装为服务,并启动它;那个Timer1能不停的显示出来“Hello”吗?我试了,没动静啊!
弄了半天,找到了一些眉目;在服务的OnExecute()方法里面写代码,这段代码可以被执行,但是只执行了一次;需要写成一个while循环才能让服务一直运行,否则服务启动之后就自动停止了;如下:
while(!Terminated)
{
TIniFile *MyIni=NULL;
try
{
MyIni=new TIniFile("c://Service1.Log");
int C=MyIni->ReadInteger("ALLCount","Count",0);
MyIni->WriteInteger("ALLCount","Count",++C);
MyIni->WriteInteger("ALLCount"+IntToStr(C),"Count",++C);
}catch(...){}
if (MyIni)
{
delete MyIni;
}
//Sleep(2000);
}
不过这里面有个问题,
问题一、如果将Sleep函数注释掉,则这个服务启动之后占用CPU特别高,加上之后,对CPU的占用就特别小了,不知道为什么?
问题二、如果我想在这个服务里面启动一个线程,并且想让这个线程一直在运行,以便于一直做一些事情,该如何做?
---------------------------------------------------------------------------------------------------------------------------------------
10 楼shadowstar(CodeFast for Delphi & C++Builder)回复于 2005-11-09 17:18:32 得分 100
晕,没想到这里的问题。
一、OnExecute里面的代码应该是:
while (!Terminate)
ServiceThread->ProcessRequests(true);
二、做一个自己的线程:
class TMyThread : public TThread
{
public:
TMyThread(bool CreateSuspended)
{
FreeOnTerminate = true;
}
void __fastcall Execute()
{
// TODO: 添加你要执行的代码
}
}
Service.OnCreate事件里:
FMyThread = new TMyThread(false);