私は何をしたいのか理想的ではないタイマーを使ってWindowsサービスをビルドしました。私は呼ぶべきメトードを持っています。そして、それが何度も何度も何度も始まりたいと思っています。これを行う最善の方法は何ですか?私に例を示すことができますか?Windowsサービスルーピング - どのように?
2
A
答えて
1
達成しようとしていることをもう少し説明できますか?
サービスでタイマーを使用する場合は、System.Threading.Timerを使用する必要があります。
あなたが常にループしているなら、あなたのCPU使用量は屋根を通過するでしょう。ディレクトリを監視しようとするとFileSystemWatcherを使うことができますが、ホストコンピュータがWindowsを実行していない場合は面倒です。テーブルを照会して結果を取得しようとすると、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
これはスタックに問題を引き起こしますか? 24時間365日稼働している場合 – MartGriff
関連する問題
- 1. どのようにWindowsのインストールは、RTL
- 2. どのようにWpfでWindowsフォームで
- 3. どのように私はWindowsで
- 4. オープンソースライブラリをWindowsでどのように使うべきですか?
- 5. どのようにWindowsのコントロールパネルプログラムを照会するには?
- 6. どのようにWindowsのリモートディレクトリを切断するには?
- 7. どのようにJavaアプレットにWindowsプログラムを埋め込む?
- 8. Windowsフォームに.pngをどのようにダウンロードしますか?
- 9. Windowsコマンドライン引数にはどのようにアクセスしますか?
- 10. 非公開にどのようにWindowsストア(2016)
- 11. どのようにWindowsフォントにMACフォントをマップしますか
- 12. どのようにWindowsシステムでサウンドを制御するには?
- 13. Windows 8のキーボードレイアウトをどのようにパッケージ化しますか?
- 14. Windows CEの\ Off WLANで - どのように?
- 15. Windowsのバッチファイルをどのようにループしますか?
- 16. どのようにWindowsレジストリのデータを難読化する - セキュリティマネージャー?
- 17. どのように私はどのようにWindows環境で働いてperlのアプリケーションでは、PHPスクリプト
- 18. どのようにWindows Live Writerなどのブログソフトウェアにアクセスするブログ
- 19. どのようにWindowsアプリケーションでHTMLを表示しますか?
- 20. Windows証明書管理 - どのように
- 21. Windows NT ACLはどのように機能しますか?
- 22. WindowsでVimをどのように実行しますか?
- 23. JARはWindowsと* nixのファイルシステムをどのように扱うのですか?
- 24. どのようにWindows 7のパスにアンドロイドツールのディレクトリを追加するには?
- 25. どのよう
- 26. Framework CSS "windows 95"のように
- 27. どのようにnetcatを
- 28. どのようにR
- 29. Windows 7のスタイルは、Internet Explorerのツールバーのコンボボックスのために、どのように?
- 30. どのようにWindowsサービス内の共有フォルダにアクセスするには?
私は助けるが、あなたが永遠に、何度も何度もやりたいれるもの好奇心旺盛にすることはできません。 – quillbreaker
ライブリンクである必要があるジョブをインポートするためにクライアントシステムをポーリングし、取得する必要があります。システムに作成されるファイルの10秒以内にインポートする必要があります。 – MartGriff
永続的な接続はありますかこの場所に?その場合、FileSystemWatcherは使用可能ですが、接続が開いていてUNC経由でドライブにアクセスできる場合のみです。 – Hooloovoo