停止Wince服务程序
大家好,
我现在在写一个wince的服务,一直打开了就无法停止,使用Getlaseterror总是报110错误。可是我能看到我程序一直在输出hello 啊,而且使用Services list可以看到服务在运行。
void CServerControlDlg::OnBnClickedButton1()
{
HANDLE hService = ActivateService(L"MyServ", 0);
if(NULL == hService){
CString ms;
ms.Format(L"Getlasterror: %d", GetLastError());
AfxMessageBox(ms);
}else{
AfxMessageBox(L"MyServ run!");
}
//CloseHandle(hService);
}
void CServerControlDlg::OnBnClickedButton2()
{
HANDLE hService = GetServiceHandle(L"MYS0:",NULL, NULL);
//HANDLE hService = CreateFile(L"MYS0:", 0, 0, NULL, OPEN_EXISTING, 0, NULL);
if(INVALID_HANDLE_VALUE != hService){
DeregisterService(hService);
} else{
CString ms;
ms.Format(L"GetLasterror: %d", GetLastError());
AfxMessageBox(ms);
}
}
//
//TODO: 如果此 DLL 相对于 MFC DLL 是动态链接的,
//则从此 DLL 导出的任何调入
//MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
//该函数的最前面。
//
//例如:
//
//extern "C" BOOL PASCAL EXPORT ExportedFunction()
//{
//AFX_MANAGE_STATE(AfxGetStaticModuleState());
//// 此处为普通函数体
//}
//
//此宏先于任何 MFC 调用
//出现在每个函数中十分重要。这意味着
//它必须作为函数中的第一个语句
//出现,甚至先于所有对象变量声明,
//这是因为它们的构造函数可能生成 MFC
//DLL 调用。
//
//有关其他详细信息,
//请参阅 MFC 技术说明 33 和 58。
//
HANDLE h_QuitEvent;
extern "C" DWORD PASCAL EXPORT MYS_Close(DWORD dwData)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return 1;
}
extern "C" DWORD PASCAL EXPORT MYS_Deinit(DWORD dwData)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
/*HANDLE h_QuitEvent = CreateEvent(NULL, false, false,
L"EVENT_GPS_THREAD");
SetEvent(h_QuitEvent);
Sleep(1000);
*/
AfxMessageBox(L"MYS_Deinit");
return 1;
}
UINT MyControllingFunction( LPVOID pParam )
{
/*HANDLE h_QuitEvent = CreateEvent(NULL, false, false,
L"EVENT_GPS_THREAD");
*/
while (TRUE)
{
AfxMessageBox(L"Hello");
Sleep(500);
//延时1秒
for(int i = 0; i < 10; i++){
//线程退出
if(WaitForSingleObject(h_QuitEvent, 100) == WAIT_OBJECT_0){
goto finish;
}
}
}
finish:
CloseHandle(h_QuitEvent);
return 0;
}
extern "C" DWORD PASCAL EXPORT MYS_Init(DWORD dwData)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
DEBUGMSG (ZONE_DEVICE, (TEXT("TEL_Init(%d)\r\n"), dwData));
AfxMessageBox(L"hello");
/*HANDLE h_QuitEvent = CreateEvent(NULL, false, false,
L"EVENT_GPS_THREAD");
*/
AfxBeginThread(MyControllingFunction, (LPVOID)dwData);
return 1;
}
extern "C" DWORD PASCAL EXPORT MYS_IOControl(
DWORD dwData,
DWORD dwCode,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return 1;
}
extern "C" DWORD PASCAL EXPORT MYS_Open(
DWORD dwData,
DWORD dwAccess,
DWORD dwShareMode)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return 1;
}
extern "C" DWORD PASCAL EXPORT MYS_Read(
DWORD dwData,
LPVOID pBuf,
DWORD dwLen)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return 1;
}
extern "C" DWORD PASCAL EXPORT MYS_Seek(
DWORD dwData,
long pos,
DWORD type)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return 1;
}
extern "C" DWORD PASCAL EXPORT MYS_Write(
DWORD dwData,
LPCVOID pInBuf,
DWORD dwInLen)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
return 1;
}