C++定时器,想让下面的程序每五分钟运行一次
/////////////////////////////////////////////////////////////////ProcessList.cpp文件#in...
///////////////////////////////////////////////////////////////
// ProcessList.cpp文件
#include "stdafx.h"
#include <windows.h>
#include <tlhelp32.h> // 声明快照函数的头文件
#include <stdio.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
freopen("Process.txt","w",stdout);//结果输出到Process.txt中
PROCESSENTRY32 pe32;
// 在使用这个结构之前,先设置它的大小
pe32.dwSize = sizeof(pe32);
// 给系统内的所有进程拍一个快照
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
printf(" CreateToolhelp32Snapshot调用失败! \n");
return -1;
}
// 遍历进程快照,轮流显示每个进程的信息
BOOL bMore = ::Process32First(hProcessSnap, &pe32);
while(bMore)
{
LPCTSTR processname=L"System";
if(!lstrcmp(pe32.szExeFile,processname))
{
printf(" %ls ", pe32.szExeFile);
printf(" %u ", pe32.th32ProcessID);
printf(" %u ,", pe32.cntThreads);
}
bMore = ::Process32Next(hProcessSnap, &pe32);
}
// 不要忘记清除掉snapshot对象
::CloseHandle(hProcessSnap);
return 0;
} 展开
// ProcessList.cpp文件
#include "stdafx.h"
#include <windows.h>
#include <tlhelp32.h> // 声明快照函数的头文件
#include <stdio.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
freopen("Process.txt","w",stdout);//结果输出到Process.txt中
PROCESSENTRY32 pe32;
// 在使用这个结构之前,先设置它的大小
pe32.dwSize = sizeof(pe32);
// 给系统内的所有进程拍一个快照
HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
printf(" CreateToolhelp32Snapshot调用失败! \n");
return -1;
}
// 遍历进程快照,轮流显示每个进程的信息
BOOL bMore = ::Process32First(hProcessSnap, &pe32);
while(bMore)
{
LPCTSTR processname=L"System";
if(!lstrcmp(pe32.szExeFile,processname))
{
printf(" %ls ", pe32.szExeFile);
printf(" %u ", pe32.th32ProcessID);
printf(" %u ,", pe32.cntThreads);
}
bMore = ::Process32Next(hProcessSnap, &pe32);
}
// 不要忘记清除掉snapshot对象
::CloseHandle(hProcessSnap);
return 0;
} 展开
2个回答
展开全部
我有个例子 你看看吧 其实就是windows的api 会了就会了
#include <Windows.h>
void dosth(int a , int b)
{
printf("a= %d,b= %d,a+b = %d",a,b,a+b);
}
typedef struct dosthpara {
int a;
int b;
}PARA,*PPARA;
//回调函数
VOID CALLBACK whatodo(PTP_CALLBACK_INSTANCE,PVOID pv,PTP_TIMER)
{
PPARA parameter = (PPARA)pv;
//这里是要定时调用的函数 dosth 和参数
dosth(parameter->a,parameter->b);
}
int main()
{
PARA a;
a.a=2,a.b=3;
PPARA parame = &a;
PTP_CALLBACK_INSTANCE pt = NULL;
PTP_TIMER ptimer = NULL;
PTP_TIMER lpTimer = CreateThreadpoolTimer(whatodo,(PVOID)parame,NULL);
ULARGE_INTEGER ul;
//run after 1sec
ul.QuadPart = (LONGLONG) -(10000000);
FILETIME ft;
ft.dwHighDateTime = ul.HighPart;
ft.dwLowDateTime = ul.LowPart;
//every 5sec
SetThreadpoolTimer(lpTimer,&ft,5000,0);
//run 12times
Sleep(1000*60);
WaitForThreadpoolTimerCallbacks(lpTimer,TRUE);
CloseThreadpoolTimer(lpTimer);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,你要不要试一下windows的那个“计划任务”功能?
然后,你每次freopen用的模式都是w,是不是每次都会把原来的数据覆盖掉啊……
然后,你每次freopen用的模式都是w,是不是每次都会把原来的数据覆盖掉啊……
追问
我想编程实现,我忘了把w改成a了
追答
因为不是计划任务控制,那么你程序在运行的时候才能控制这代码要不要执行。
如果程序退掉那就不能控制了。
再然后windows里有一个函数叫做Sleep可以挂起当前线程。
你就弄一个大循环,执行一次这个代码就调用一下sleep函数挂起300秒就可以了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询