我已经建立一个Windows服务使用一个计时器,这是不是我想要做的理想。我有一个方法,我想打电话,一旦它结束,我希望它一次又一次地开始。这样做的最好方法是什么,你可以给我一个例子。Windows服务循环 - 如何?
2
A
回答
1
你能解释一下你想完成什么吗?
在Service中使用计时器时,您需要使用System.Threading.Timer。
如果你经常循环,那么你的CPU使用率将会通过屋顶。如果您尝试监视某个目录,则可以使用FileSystemWatcher,但如果您的主机未运行Windows,这可能会很麻烦。如果你试图查询一个表并得到结果,你可以每隔15秒查看一条新记录,并且如果存在新记录,则将该函数标记为通过布尔值运行,以便如果它在15秒后仍然运行,则不会再次启动。
我打算给你一个系统服务中定时器的例子。
Private myThreadingTimer As System.Threading.Timer
Private blnCurrentlyRunning As Boolean = False
Protected Overrides Sub OnStart(ByVal args() As String)
Dim myTimerCallback As New TimerCallback(AddressOf OnTimedEvent)
myThreadingTimer = New System.Threading.Timer(myTimerCallback, Nothing, 1000, 1000)
End Sub
Private Sub OnTimedEvent(ByVal state As Object)
If Date.Now.Second = 1 Or Date.Now.Second = 15 Or Date.Now.Second = 30 Or Date.Now.Second = 45 Then
If Not blnCurrentlyRunning Then
blnCurrentlyRunning = True
Dim myNewThread As New Thread(New ThreadStart(AddressOf MyFunctionIWantToCall))
myNewThread.Start()
End If
End If
End Sub
Public Sub MyFunctionIWantToCall()
Try
'Do Something
Catch ex As Exception
Finally
blnCurrentlyRunning = False
End Try
End Sub
3
private AutoResetEvent m_waitNextExec = new AutoResetEvent(false);
private int m_execTimer = 1000; //Every second
private bool m_isRunning = true;
private void SomeMethod()
{
while (m_isRunning)
{
//Do something
m_waitNextExec.WaitOne(m_execTimer);
}
}
此代码使您对代码的执行更多的控制。自动重置事件为您提供了降低执行率的可能性。
如果你想中止执行,你只需要做:
m_isRunning = false;
m_waitNextExec.Set();
+0
这会导致堆栈出现问题吗?如果全天候运行 – MartGriff 2009-07-29 16:08:21
相关问题
- 1. 的Windows消息循环和服务器循环
- 2. Ember同步循环服务
- 3. PHP web服务循环
- 4. Symfony2服务循环依赖?
- 5. SQL服务器循环表
- 6. 带有循环和WCF的Windows服务线程
- 7. 创建运行无限循环的windows服务
- 8. 如何用C++执行Windows主循环中的任务
- 9. 如何循环Windows窗体对象incremently
- 10. 如何调试Windows服务
- 11. 如何测试Windows服务
- 12. 如何安装Windows服务
- 13. SQL服务器 - 循环级联通路
- 14. php socket与服务器中的循环
- 15. windows服务递归无限循环,延迟执行同步任务
- 16. 避免循环引用服务和DI
- 17. Terraform服务之间的循环依赖
- 18. PHP while循环不在服务器上
- 19. 从Windows服务访问环境变量
- 20. C#在高效的Windows服务中安排循环任务的最佳方法
- 21. 如何通过另一个Windows服务创建Windows服务
- 22. 如何使用C#.NET中的Windows服务调用Windows服务?
- 23. 如何在启动Windows服务时阅读Windows服务配置?
- 24. SQL服务器循环和游标
- 25. 我的服务不会循环
- 26. Windows消息循环
- 27. 通过ajaxcallback循环(WCF服务)
- 28. 无限循环从服务器
- 29. 循环引用注入安全服务到选民服务
- 30. 在boost :: asio中,如何给服务循环添加超时?
我不禁好奇什么是你想要做一遍又一遍,直到永远。 – quillbreaker 2009-07-29 15:42:12
我们调查客户端系统以导入需要成为活动链接的作业,他们不会推送它们,我们必须去获取它们,并且我们需要在系统上创建的文件的10秒内导入它们 – MartGriff 2009-07-29 15:50:56
是否存在永久连接到这个位置?如果是这样,一个FileSystemWatcher是可用的...但只有当连接打开,你可以通过UNC访问驱动器。 – Hooloovoo 2009-07-29 15:53:57