VC Service程式設計(一)編寫main函式

2021-06-27 09:52:19 字數 1254 閱讀 4780

翻譯自msdn,是好多年前我發布在好網部落格上的,現在把它轉過來

編寫服務程式的main函式

服務程式的main函式呼叫startservicectrldispatcher函式,將它與scm(服務控制管理器)聯絡起來,並開啟乙個控制排程執行緒。控制排程執行緒不停的迴圈,等待接收在排程表中已經定義好的控制請求。除非程式中的所有服務都中止或者遇到錯誤,要不這個執行緒不會返回。當程式中的所有服務都中止的時候,scm給排程執行緒傳送乙個控制請求,讓它關閉。這時,執行緒從呼叫startservicectrldispatcher函式的地方返回,程式中止。

下面,是乙個只支援乙個服務的程式。svcdebugout函式負責向偵錯程式輸出指示資訊和錯誤。它有兩個引數:乙個格式化的輸出字串,和這個字串的長度值。

#include

service_status          myservicestatus;

service_status_handle   myservicestatushandle;

void svcdebugout(lpstr string, dword status);

void  winapi myservicectrlhandler (dword opcode);

void  myservicestart (dword argc, lptstr *argv);

dword myserviceinitialization (dword argc, lptstr *argv,

dword *specificerror);

void main( )

service_table_entry   dispatchtable =

,if (!startservicectrldispatcher( dispatchtable))

svcdebugout(" [my_service] startservicectrldispatcher (%d) ",

getlasterror());

void svcdebugout(lpstr string, dword status)

char  buffer[1024];

if (strlen(string) < 1000)

sprintf(buffer, string, status);

outputdebugstringa(buffer);

如果想要服務程式支援多服務,main函式的實現會有一些同。將所有服務的名稱都按照"myservice"的格式加入到排程表中,使他們可以被排程執行緒監視

VC Service程式設計(八)多執行緒服務

scm 服務控制管理器 向服務的控制處理器傳送服務控制事件來控制乙個服務。服務必須在短時間內響應控制請求,使得scm可以明確服務的當前狀態。還有,服務的當前狀態必須和它向scm報告的狀態相一致。由於服務和scm之間的這種通訊機制,使用多執行緒服務必須小心。當從scm那裡收到停止指示,在向scm報告服...

matlab 程式設計 m檔案

功能 命令列簡單疊加,matlab按照順序執行,解決使用者在命令視窗執行許多命令,避免使用者做許多重複性工作。注意 變數為全域性變數 功能 實現計算中引數傳遞和函式呼叫。注意 1 變數為區域性變數 2 檔名 與 函式名 一一對應。3 函式的輸入引數與輸出引數 a 函式有返回引數和輸入引數。例如 傳給...

編寫人生?一生程式設計?

不懂得也不知道為什麼選擇這個專業!不能明白也不理解自己當初的選擇!每天都在看著電腦螢幕不時地會發呆,不知道自己在做什麼?懂得了多少東西?從未接觸過的新的知識,留給自己的只有懵懂,懵懂的我不知道該何去何從?停下來靜靜地想一想,我的未來。我也不知道該幹什麼?如今激烈的競爭崗位,ios 系統的飽和,and...