so there is an issue I've come accros: my c++ program lags pc and freezes everything (like a drop from 30fps to 1fps) without any real cause - each time crash happens when executing different parts of the code in the main loop
The program is very simple autoclicker running in background, few functions repeated over and over in a main loop - console takes care of few things:
1) Look for certain pixel on browser screen at certain position
2) Look for other certain pixel on browser screel at certain position
3) Set mouse position and press and hold LMB then set another mouse position then release LMB
4) Wait and repeat
After around 6mins45secs of running, it happens: massive lag, fps drop...
I have been checking live debug log in visual studio - nothing, processor and memory usage is always the same - around 1% and 4mb of memory while the program is running.
After the lag happens, when I close running program (it takes forever) the condition still persist - when i try pressing ctrl+alt+del and other actions, the lag is still going on. Only reset helps.
What could be the issue? How can I track whats doing this issue? The main problem is that the lag seems to have no cause and no visual effects in pc/memory usage.
Im running Windows 10 and Visual Studio 2015.
Im including full code below:
// ConsoleApplication5.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <string>
#include <stdlib.h>
#include <ctime>
#include <math.h> /* ceil */
const int TIME_CHECK = 0; // tryb do sprawdzania czasu wykonywania funkcji
const int WYSOKOSC_RZUT = 545;
const int OKNO_SENSIVITY = 100;
const int KOREKTA = 45;
const int OKNO_LEFT = 85; // WASKIE = 85, SZEROKIE = 510
const int OKNO_RIGHT = 415; // WASKIE = 415, SZEROKIE = 840
const int KUBELEK_POS = 430; // WASKIE = 430, SZEROKIE = 415
const int KUBELEK_KOLOR = 66;
const int MIESO_POS = 695; // WASKIE = 695, SZEROKIE = 680
const int MIESO_KOLOR_START = 18;
const int MIESO_KOLOR_END = 32;
using namespace std;
INPUT Input = { 0 };
int getColor(int X, int Y)
{
HDC _hdc = GetDC(NULL);
COLORREF _color = 0;
try
{
_color = GetPixel(_hdc, X, Y);
}
catch (...)
{
cout << "# Jakis problem z braniem koloru!" << endl;
return 0;
}
return GetBValue(_color); // blue value
}
// ------------------------------------------
int findKubelekCenter() {
for (int i = 0; i < 5; i++)
{
int position = OKNO_LEFT + i * 73;
int startKubelka = 0, endKubelka = 0;
int color = getColor(position, KUBELEK_POS);
if (color == KUBELEK_KOLOR)
{
// szukanie wczesniej
for (int i = 0; i < 12; i++)
{
int temp = getColor(position - i * 8, KUBELEK_POS);
if (temp != 66)
{
startKubelka = position - i * 8;
break;
}
}
// szukanie dalej
for (int i = 0; i < 12; i++)
{
int temp = getColor(position + i * 8, KUBELEK_POS);
if (temp != KUBELEK_KOLOR)
{
endKubelka = position + i * 8;
break;
}
}
int srodekKubelka = ceil((startKubelka + endKubelka) / 2);
return srodekKubelka;
} // koniec if color == 66
}
return 0;
}
int findMiesoCenter() {
for (int i = 0; i < 8; i++)
{
int position = OKNO_LEFT + i * 40;
int startMiesa = 0, endMiesa = 0;
int color = getColor(position, MIESO_POS);
if (color <= MIESO_KOLOR_END && color >= MIESO_KOLOR_START)
{
// szukanie wczesniej
for (int i = 0; i < 22; i++)
{
int temp = getColor(position - i * 4, MIESO_POS);
if (temp > MIESO_KOLOR_END || temp < MIESO_KOLOR_START)
{
startMiesa = position - i * 4;
break;
}
}
// szukanie dalej
for (int i = 0; i < 22; i++)
{
int temp = getColor(position + i * 4, MIESO_POS);
if (temp > MIESO_KOLOR_END || temp < MIESO_KOLOR_START)
{
endMiesa = 12 + position + i * 4; // 12 to nozka miesa ktorej nie licze na tym poziomie
break;
}
}
int srodekMiesa = ceil((startMiesa + endMiesa) / 2);
return srodekMiesa;
} // koniec if color == 66
}
return 0;
}
void rzuc(int posKubelek, int posMieso)
{
int difference = ceil((posKubelek - posMieso)/2);
cout << "Kubelek na pos: [" << posKubelek << "] Mieso na pos: [" << posMieso << "]" << endl;
// ustaw na srodku
SetCursorPos(posMieso, 680);
cout << "Kursor: OD x,y [" << posMieso << "][680] ";
Sleep(75);
// przytrzymaj
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1, &Input, sizeof(INPUT));
Sleep(75);
// ustaw na pozycji docelowej
SetCursorPos(posMieso + difference, WYSOKOSC_RZUT);
cout << "DO x,y [" << posMieso + difference << "][" << WYSOKOSC_RZUT << "]" << endl;
Sleep(75);
// zwolnij
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1, &Input, sizeof(INPUT));
Sleep(75);
}
// KOD GLOWNY
int main()
{
Input.type = INPUT_MOUSE;
int kubelekCenter = 0;
int miesoCenter = 0;
int oldKubelekCenter = 675;
int korekta = 0;
char kierunek = 'P';
int punkty = 0;
int time = 0;
for (int i = 10; i > 1; i--)
{
cout << "Pozostalo " << i << " sekund na przygotowanie." << endl;
Sleep(1000);
system("cls");
}
// prosta petla gry:
for(int punkty =0; punkty<1500; punkty++)
{
startpetli:
if (punkty == 10 && punkty == 20 && punkty == 30) Sleep(3500);
// 1. Znajdz srodek kubelka
try
{
if (TIME_CHECK) time = clock();
cout << "1 -> Szukam srodka kubelka!" << endl;
bool loopBool = false;
while (loopBool == false)
{
while (kubelekCenter == 0)
{
kubelekCenter = findKubelekCenter();
}
loopBool = true;
if (kubelekCenter < OKNO_LEFT + OKNO_SENSIVITY || kubelekCenter > OKNO_RIGHT - OKNO_SENSIVITY)
{
cout << "# Kubelek zbyt blisko krawedzi [" << kubelekCenter << "], pomijamy!" << endl;
loopBool = false;
kubelekCenter = 0;
Sleep(1000);
}
}
if (TIME_CHECK) cout << "@ Wywolanie funkcji zajelo: [" << clock() - time << "ms]" << endl;
}
catch (...)
{
cout << "#Jakis problem z wykonaniem: [2]" << endl;
goto startpetli;
}
// 0. Sprawdz kierunek kubelka
try
{
cout << "0 -> Sprawdzam kierunek kubelka!" << endl;
int temp1 = 0, temp2 = 0;
while (temp1 == 0)
temp1 = findKubelekCenter();
while (temp2 == 0)
temp2 = findKubelekCenter();
cout << "# Odczyt kubelka 1 x[" << temp1 << "] odczyt kubelka 2 [" << temp2 << "]" << endl;
if (temp1 == temp2) {
cout << "# Kubelek stoi w miejscu!" << endl; korekta = 0;
if (punkty > 30)
{
Sleep(300);
while (temp1 == 0)
temp1 = findKubelekCenter();
while (temp2 == 0)
temp2 = findKubelekCenter();
if (temp1 > temp2) {
kierunek = 'L'; cout << "# Kubelek porusza sie w kierunku: Lewo" << endl; korekta = -KOREKTA;
}
else if (temp1 < temp2) {
kierunek = 'R'; cout << "# Kubelek porusza sie w kierunku: Prawo" << endl; korekta = KOREKTA;
}
else korekta = 0;
}
}
else if (temp1 > temp2) {
kierunek = 'L'; cout << "# Kubelek porusza sie w kierunku: Lewo" << endl; korekta = -KOREKTA;
}
else if (temp1 < temp2) {
kierunek = 'R'; cout << "# Kubelek porusza sie w kierunku: Prawo" << endl; korekta = KOREKTA;
}
else korekta = 0;
}
catch (...)
{
cout << "#Jakis problem z wykonaniem: [1]" << endl;
goto startpetli;
}
// 2. Znajdź srodek mieska
try
{
if (TIME_CHECK) time = clock();
cout << "2 -> Szukam srodka mieska!" << endl;
while (miesoCenter == 0)
{
miesoCenter = findMiesoCenter();
}
if (TIME_CHECK) cout << "@ Wywolanie funkcji zajelo: [" << clock() - time << "ms]" << endl;
}
catch (...)
{
cout << "#Jakis problem z wykonaniem: [3]" << endl;
goto startpetli;
}
// 3. Rzuc miesko
try
{
if (TIME_CHECK) time = clock();
cout << "3 -> Rzucam!" << endl;
rzuc(kubelekCenter+korekta, miesoCenter);
if (TIME_CHECK) cout << "@ Wywolanie funkcji zajelo: [" << clock() - time << "ms]" << endl;
}
catch (...)
{
cout << "#Jakis problem z wykonaniem: [3]" << endl;
goto startpetli;
}
// 4. Czekaj
try
{
if (TIME_CHECK) time = clock();
cout << "4 -> Czekam!" << endl;
Sleep(500);
if (TIME_CHECK) cout << "@ Wywolanie funkcji zajelo: [" << clock() - time << "ms]" << endl;
}
catch (...)
{
cout << "#Jakis problem z wykonaniem: [4]" << endl;
goto startpetli;
}
cout << "Mamy lacznie punktow: [" << punkty << "]" << endl;
cout << string(50, '#') << endl;
kubelekCenter = 0;
miesoCenter = 0;
}
cout << "Cos sie zjebalo :D" << endl;
system("PAUSE");
return 1;
}
Aucun commentaire:
Enregistrer un commentaire