首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

终止Wince服务程序

2013-06-25 
停止Wince服务程序大家好,我现在在写一个wince的服务,一直打开了就无法停止,使用Getlaseterror总是报110错

停止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;
}



这个问题困扰我两天了。。。大家帮帮我把。。 WinCE 服务
[解决办法]
呵呵,帮忙顶下,加油
[解决办法]
试试找到你服务的进程,然后强行关闭

如果不行的话,在你的服务里面添加个全局事件,接收到该事件后,自动跳出循环处理。然后再关闭试试
[解决办法]
引用:
试试找到你服务的进程,然后强行关闭

如果不行的话,在你的服务里面添加个全局事件,接收到该事件后,自动跳出循环处理。然后再关闭试试


同意

如果系统默认的方式不行的,就只能代码来实现
[解决办法]
好像可以响应事件停止啊~

热点排行