hur.cn - 华软网

 热门搜索

定时做操作比较合理的办法

  作者:未知    来源:网络    更新时间:2011/7/27
我想要每天的某个时刻或者每个月的某个时刻让程序做特定的操作,有没有什么好的办法?
不会只能用定时器吧。。高分求解
---华软 网友回答---
你也可以搞个计时的线程嘛
---华软网友回复---
界面搞个按钮,到时间人去按一下!
呵呵,开玩笑了!

居然是定时的,肯定还是定时器了!无论是线程还是进程!
---华软网友回复---
job
---华软网友回复---
// schedule,系统的计划任务。
---华软网友回复---
SetWaitableTimer
The SetWaitableTimer function activates the specified "waitable" timer. When the due time arrives, the timer is signaled and the thread that set the timer calls the optional completion routine.

BOOL SetWaitableTimer(
  HANDLE hTimer, // handle to a timer object
  const LARGE_INTEGER *pDueTime, // when timer will become signaled
  LONG lPeriod, // periodic timer interval
  PTIMERAPCROUTINE pfnCompletionRoutine, // completion routine
  LPVOID lpArgToCompletionRoutine, // data for completion routine
  BOOL fResume // flag for resume state
);
 

---华软网友回复---
引用 1 楼 visualeleven 的回复:
你也可以搞个计时的线程嘛

计时的线程 也是调用定时器吧
---华软网友回复---
http://topic.csdn.net/u/20100817/09/ca48807e-5dd9-492a-b8fc-2ce9b3b27167.html
---华软网友回复---
引用 7 楼 feilongjilei 的回复:
http://topic.csdn.net/u/20100817/09/ca48807e-5dd9-492a-b8fc-2ce9b3b27167.html




+1
---华软网友回复---
SetWaitableTimer
---华软网友回复---
还有没有其他好的方案?
---华软网友回复---

---华软网友回复---
创建一个线程,在线程中用
C++">
DWORD WaitForSingleObject(
  HANDLE hHandle,        
  DWORD dwMilliseconds  //通过设置此参数 
)
?????
---华软网友回复---
给你一段代码,自己改改就行,最烦不给代码瞎墨迹
C++">vc定制计划任务
2010年05月21日 星期五 14:22
参见:http://topic.csdn.net/t/20041216/09/3649884.html
#include   <windows.h>  
#include   <initguid.h>  
#include   <ole2.h>  
#include   <mstask.h>  
#include   <msterr.h>  
#include   <objidl.h>  
#include   <wchar.h>  
#include   <stdio.h>  


int   main(int   argc,   char   **argv)  
{  
HRESULT   hr   =   ERROR_SUCCESS;  
ITaskScheduler   *pITS;  


/////////////////////////////////////////////////////////////////  
//   Call   CoInitialize   to   initialize   the   COM   library   and   then    
//   CoCreateInstance   to   get   the   Task   Scheduler   object.    
/////////////////////////////////////////////////////////////////  
hr   =   CoInitialize(NULL);  
if   (SUCCEEDED(hr))  
{  
hr   =   CoCreateInstance(CLSID_CTaskScheduler,  
NULL,  
CLSCTX_INPROC_SERVER,  
IID_ITaskScheduler,  
(void   **)   &pITS);  
if   (FAILED(hr))  
{  
CoUninitialize();  
return   1;  
}  
}  
else  
{  
return   1;  
}  


/////////////////////////////////////////////////////////////////  
//   Call   ITaskScheduler::NewWorkItem   to   create   new   task.  
/////////////////////////////////////////////////////////////////  
LPCWSTR   pwszTaskName;  
ITask   *pITask;  
IPersistFile   *pIPersistFile;  
pwszTaskName   =   L"Test   Task";  

hr   =   pITS->NewWorkItem(pwszTaskName, //   Name   of   task  
CLSID_CTask, //   Class   identifier    
IID_ITask, //   Interface   identifier  
(IUnknown**)&pITask); //   Address   of   task   interface  


pITS->Release(); //   Release   object  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   calling   NewWorkItem,   error   =   0x%x\n",hr);  
return   1;  
}  

//////////////////////////////////////////////////////////////////  
//   set   task   application   name  
//  
/////////////////////////////////////////////////////////////////  
LPCWSTR   pwszApplicationName   =   L"WScript.exe";  
hr   =   pITask->SetApplicationName(pwszApplicationName);  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   calling   SetApplicationName,   error   =   0x%x\n",hr);  
return   1;  
}  

//////////////////////////////////////////////////////////////////  
//Sets   the   command-line   parameters   for   the   task  
//  
/////////////////////////////////////////////////////////////////  
LPCWSTR   pwszParameters   =   L"   C:\\2222\\amgDBMaintain.wsf";  
hr   =   pITask->SetParameters(pwszParameters);  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   calling   SetParameters,   error   =   0x%x\n",hr);  
return   1;  
}  

//////////////////////////////////////////////////////////////////  
//Sets   the   working   directory   for   the   task  
//  
/////////////////////////////////////////////////////////////////  
LPCWSTR   pwszWorkingDirectory     =   L"C:\\2222\\";  
hr   =   pITask->SetWorkingDirectory(pwszWorkingDirectory   );  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   calling   SetWorkingDirectory,   error   =   0x%x\n",hr);  
return   1;  
}  

/////////////////////////////////////////////////////////////////  
//   Call   IUnknown::QueryInterface   to   get   a   pointer   to    
//   IPersistFile   and   IPersistFile::Save   to   save    
//   the   new   task   to   disk.  
/////////////////////////////////////////////////////////////////  

hr   =   pITask->QueryInterface(IID_IPersistFile,(void   **)&pIPersistFile);  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   calling   QueryInterface,   error   =   0x%x\n",hr);  
return   1;  
}  

///////////////////////////////////////////////////////////////////  
//   Set   accountinformation  
////////////////////////////////////////////////////////////////////  
hr   =pITask->SetAccountInformation(L"",   NULL);  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   calling   SetAccountInformation,   error   =   0x%x\n",hr);  
return   1;  
}  

///////////////////////////////////////////////////////////////  
//   Save  
//////////////////////////////////////////////////////////////  
hr   =   pIPersistFile->Save(NULL,   TRUE);  
// pIPersistFile->Release();  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   calling   Save,   error   =   0x%x\n",hr);  
return   1;  
}  

//////////////////////////////////////////////////////////////////  
//Create   task   trigger   object  
//  
/////////////////////////////////////////////////////////////////  
ITaskTrigger   *pITaskTrigger;  
WORD   piNewTrigger;  
hr   =   pITask->CreateTrigger(&piNewTrigger,   &pITaskTrigger);  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   create   tasktrigger   object,   error   =   0x%x\n",hr);  
return   1;  
}  

///////////////////////////////////////////////////////////////  
//   Save  
//////////////////////////////////////////////////////////////  
hr   =   pIPersistFile->Save(NULL,   TRUE);  
// pIPersistFile->Release();  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   calling   Save,   error   =   0x%x\n",hr);  
return   1;  
}  


//////////////////////////////////////////////////////////////////  
//Set   task   trigger  
//  
/////////////////////////////////////////////////////////////////  
TASK_TRIGGER   pTrigger;  
TRIGGER_TYPE_UNION   triggertype;  
triggertype.Daily.DaysInterval   =   1;  
ZeroMemory(&pTrigger,   sizeof   (TASK_TRIGGER));  
pTrigger.wStartHour   =   14;  
pTrigger.wStartMinute   =   40;  
pTrigger.wBeginDay   =12;  
pTrigger.wBeginMonth   =11;  
pTrigger.wBeginYear   =2004;  
pTrigger.cbTriggerSize   =   sizeof   (TASK_TRIGGER);  
pTrigger.TriggerType   =   TASK_TIME_TRIGGER_DAILY;  
pTrigger.Type   =   triggertype;  
hr   =   pITaskTrigger->SetTrigger(&pTrigger);  
pITaskTrigger->Release();  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   create   tasktrigger   object,   error   =   0x%x\n",hr);  
return   1;  
}  

///////////////////////////////////////////////////////////////  
//   Save  
//////////////////////////////////////////////////////////////  
hr   =   pIPersistFile->Save(NULL,   TRUE);  
pIPersistFile->Release();  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   calling   Save,   error   =   0x%x\n",hr);  
return   1;  
}  



/////////////////////////////////////////////////////////////////  
//   Release   all   resources.  
/////////////////////////////////////////////////////////////////  

hr   =   pITask->Release();  
if   (FAILED(hr))  
{  
CoUninitialize();  
fprintf(stderr,   "Failed   calling   Release,   error   =   0x%x\n",hr);  
return   1;  
}  


printf("Created   task.\n");  
return   0;  

}

---华软网友回复---
过几天研究下,现在没有时间。。。
---华软网友回复---
谢谢各位~!
---华软网友回复---
建议用线程,定时器运行时间长了可能拖慢系统。

---华软网友回复---
引用 16 楼 jennyvenus 的回复:
建议用线程,定时器运行时间长了可能拖慢系统。

为什么。。。
---华软网友回复---
100的技术分。没啥人回答。。- -
---华软网友回复---
线程
计时器
你都不满意
那么还有一个办法

就是计算X天X月X日X时X分X秒为一个特殊数据
然后,嘿嘿嘿嘿。。。。。。。。。。

---华软网友回复---
线程和定时器都不好,会消耗系统资源,尤其是定时器。用计划任务比较好。
---华软网友回复---
引用 19 楼 gz_qmc 的回复:
线程
计时器
你都不满意
那么还有一个办法

就是计算X天X月X日X时X分X秒为一个特殊数据
然后,嘿嘿嘿嘿。。。。。。。。。。

有道理,我之前考虑的更多的是这个方法。。。就是感觉很偏哈
---华软网友回复---
要程序自动检测只能放在定时器里了啊,不然没有触发事件啊,确实是单开一个线程计算时间好,不然耗资源,拖累系统      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。