原来一个服务(用线程定时运行一个程序)例子是这样的: 
void CALLBACK MyTimerProc(  
HWND hwnd, 
UINT uMsg, 
UINT idEvent, 
DWORD dwTime ) 

::MessageBox(NULL, _T("timer"), _T("SMS"), MB_OK); 
} unsigned long __cdecl MyControllingFunction( LPVOID pParam ) 

g_nTimer = SetTimer(0, 0, 10 * 1000, MyTimerProc);  //定时 10秒运行一次MSG msg; 
while (GetMessage(&msg, 0, 0, 0)) 

TranslateMessage(&msg); 
DispatchMessage(&msg); 

return 0; 
} 主程序调用 
DWORD MYS_Init(DWORD dwData){ 
  HANDLE hThread = CreateThread( 0, 0, MyControllingFunction, 0, 0, 0); }   这是10秒钟执行一次程序MessageBox ,
  但我想就运行1次程序,就可以了,不要一直循环执行这个程序, 
  那上面的程序里要怎么改啊?

解决方案 »

  1.   

    你可以在MyTimerProc里把那个g_nTimer给kill掉就可以了
      

  2.   

    设置全局变量,线程中执行MessageBox之前进行判断,执行后置位,以后就不执行了,如果想要重新执行可以在程序其他函数中进行修改,这样又可以执行一次。
      

  3.   


    void CALLBACK MyTimerProc(  
    HWND hwnd, 
    UINT uMsg, 
    UINT idEvent, 
    DWORD dwTime ) 

        ::MessageBox(NULL, _T("timer"), _T("SMS"), MB_OK);
        KillTimer(idEvent);

      

  4.   

    设置全局变量,线程中执行MessageBox之前进行判断,执行后置位,以后就不执行了,如果想要重新执行可以在程序其他函数中进行修改,这样又可以执行一次。
      

  5.   

    设置全局变量,线程中执行MessageBox之前进行判断,执行后置位,以后就不执行了,如果想要重新执行可以在程序其他函数中进行修改,这样又可以执行一次。
      

  6.   


    void CALLBACK MyTimerProc(  
    HWND hwnd, 
    UINT uMsg, 
    UINT idEvent, 
    DWORD dwTime ) 

        ::MessageBox(NULL, _T("timer"), _T("SMS"), MB_OK);
        KillTimer(idEvent);

      

  7.   

    设置全局变量,线程中执行MessageBox之前进行判断,执行后置位,以后就不执行了,如果想要重新执行可以在程序其他函数中进行修改,这样又可以执行一次。
      

  8.   

         KillTimer 以后如果想让这个程序再运行,怎么办??
      

  9.   

      KillTimer 就可以了吗?  要不要结束掉线程,怎样结束??
      

  10.   

    killtimer 以后,如果你被调用的程序关闭了,那么就不会在次运行了。内核互斥对象去网上搜一下就好了,或者看windows 核心编程。其实最好的办法是在你的程序中加如对调用程序的判断,如果该进程存在则不运行程序