用c ++每30秒检查一次

时间:2013-06-06 17:50:29

标签: c++ windows winapi

您好我使用此代码检查我的应用程序“piko.exe”运行后的进程以及如果程序如 “non.exe”,“firefox.exe”,“lol.exe”如果运行已关闭我的应用程序并返回错误。

但是我需要每隔30秒进行一次这个检查过程,但我使用的时候,但是我的主程序(这段代码是我项目的一部分)停止工作,如果可能,请求有人编辑我的代码谢谢。

#include "StdInc.h"
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <stdio.h>


void find_Proc(){



HANDLE proc_Snap;
HANDLE proc_pik;
HANDLE proc_pikterm;

PROCESSENTRY32 pe32;
PROCESSENTRY32 pe32pik;

int i;
char* chos[3] = {"non.exe","firefox.exe","lol.exe"};

char* piko = "piko.exe";

proc_pik = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
proc_Snap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );

pe32.dwSize = sizeof(PROCESSENTRY32);
pe32pik.dwSize = sizeof(PROCESSENTRY32);


for(i = 0; i < 3 ; i++){

    Process32First(proc_Snap , &pe32);
    do{

        if(!strcmp(chos[i],pe32.szExeFile)){
            MessageBox(NULL,"CHEAT DETECTED","ERROR",NULL);
            Process32First(proc_pik,&pe32pik);
                do{

                    if(!strcmp(iw4m,pe32pik.szExeFile)){

                        proc_pikterm =  OpenProcess(PROCESS_ALL_ACCESS, TRUE, pe32pik.th32ProcessID);

                        if(proc_pikterm != NULL)
                            TerminateProcess(proc_pikterm, 0);
                        CloseHandle(proc_pikterm);
                    }

                } while(Process32Next(proc_pik, &pe32pik));

    }

} while(Process32Next(proc_Snap, &pe32));
}
CloseHandle(proc_Snap);

CloseHandle(proc_pik);
}

2 个答案:

答案 0 :(得分:0)

根据您使用的操作系统,您可以轮询系统时间并检查30秒是否已过期。这样做的方法是在循环开始时花时间,在结束时花时间并减去它们。然后从代码运行该例程开始,减去您想要睡眠的时间。

另外,如果你不需要30秒,你可以在你的循环中添加sleep(30)。

答案 1 :(得分:0)

你能解释一下为什么这种方法不适合你吗?以下代码旨在每秒计算一个值。让“checkMyProcess”在睡眠调用之前执行在while循环中所需的任何操作。

#include <iostream>
using namespace std;

int someGlobal = 5;//Added in a global so you can see what fork does, with respect to not sharing memory!

bool checkMyProcess(const int MAX) {
    int counter = 0;
    while(counter < MAX) {
        cout << "CHECKING: " << counter++ <<  " Global: " << someGlobal++ << endl;
        sleep(1);
    }
}

void doOtherWork(const int MIN) {
    int counter = 100;
    while(counter > MIN) {
        cout << "OTHER WORK:" << counter-- << " Global: " << someGlobal << endl;
        sleep(1);
    }
}

int main() {
    int pid = fork();

    if(pid == 0) {
        checkMyProcess(5);
    } else {
        doOtherWork(90);
    }
}

当然要意识到,如果你想在while循环外工作,在同一个程序中,你必须使用线程,或者分叉一对进程。

编辑:

我在调用“fork”时添加了,因此您可以看到两个进程同时工作。注意:如果“checkMyProcess”函数需要了解“doOtherWork”功能中的内存,那么线程将是一个更容易的解决方案!