Bagikan melalui


Layanan Multithreaded

Manajer kontrol layanan (SCM) mengontrol layanan dengan mengirim peristiwa kontrol layanan ke rutinitas handler kontrol layanan. Layanan harus merespons peristiwa kontrol secara tepat waktu sehingga SCM dapat melacak status layanan. Selain itu, status layanan harus sesuai dengan deskripsi statusnya yang diterima SCM.

Karena mekanisme komunikasi antara layanan dan SCM ini, Anda harus berhati-hati saat menggunakan beberapa utas dalam layanan. Ketika layanan diinstruksikan untuk berhenti oleh SCM, layanan harus menunggu semua utas keluar sebelum melaporkan ke SCM bahwa layanan dihentikan. Jika tidak, SCM dapat menjadi bingung tentang status layanan dan mungkin gagal dimatikan dengan benar.

SCM perlu diberi tahu bahwa layanan merespons peristiwa stop control dan kemajuan tersebut sedang dibuat dalam menghentikan layanan. SCM akan mengasumsikan layanan mengalami kemajuan jika layanan merespons (melalui SetServiceStatus) dalam waktu (petunjuk tunggu) yang ditentukan dalam panggilan sebelumnya ke SetServiceStatus, dan titik pemeriksaan diperbarui agar lebih besar dari titik pemeriksaan yang ditentukan dalam panggilan sebelumnya ke SetServiceStatus.

Jika layanan melaporkan ke SCM bahwa layanan telah berhenti sebelum semua utas keluar, ada kemungkinan SCM akan menafsirkan ini sebagai kontradiksi. Ini dapat mengakibatkan status di mana layanan tidak dapat dihentikan atau dimulai ulang.