• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++ While(true) - optymalizacja

+1 głos
390 wizyt
pytanie zadane 18 października 2020 w C i C++ przez elkamill0 Nowicjusz (220 p.)

Witam. Napisałem w c++ aplikację cmd w tle, dzięki której po kliknięciu klawiszy Lalt + 'C' wyświetla się wiersz poleceń. Aplikacja działa, tylko jest jeden problem. Zużywa ona aż 10% procesora (wszystko przez pętlę while(true), która wykonuje się cały czas). Jest jakiś sposób na zoptymalizowanie tego? Czy zastosowanie języka niskopoziomowego mogłaby rozwiązać ten problem?

#include <iostream>
#include <Windows.h>

using namespace std;

HWND hWnd = FindWindowA(NULL, "C:\\Users\\Kamil\\source\\repos\\cmd shortcut\\Debug\\cmd shortcut.exe");

int main()
{
	ShowWindow(hWnd, SW_HIDE);

	while(true) 
	{
		while (GetAsyncKeyState(VK_LMENU) && GetAsyncKeyState('C'))
		{
			system("start");
			Sleep(2000);
		}
	}
	return 0;
}

 

3 odpowiedzi

+1 głos
odpowiedź 18 października 2020 przez VBService Ekspert (256,640 p.)
wybrane 18 października 2020 przez elkamill0
 
Najlepsza

wink a może po prostu "skrót  klawiszowy" z poziomu systemu

0 głosów
odpowiedź 18 października 2020 przez overcq Pasjonat (22,630 p.)
Do tego służy procedura okna w aplikacji okienkowej, a tutaj masz aplikację wiersza poleceń.
0 głosów
odpowiedź 18 października 2020 przez VBService Ekspert (256,640 p.)
edycja 18 października 2020 przez VBService

Może, SetWindowsHookExA function (winuser.h) lub jak dobrze pamiętam w Visual Basic-u, było używane, takie polecenie DoEvents, kiedy miało się do czynienia z "takim pętlami". 

For I = 1 To 150000

    . . .

    If I Mod 1000 = 0 Then ' If loop has repeated 1000 times.
       . . . 
       DoEvents ' Yield to operating system.
    End If
Next I 

może idąc tym tropem spróbuj: 

    while(true) 
    {
        while (GetAsyncKeyState(VK_LMENU) && GetAsyncKeyState('C'))
        {
            system("start");
            Sleep(2000);
        }

        Sleep(2000);
    }

 

Podobne pytania

0 głosów
1 odpowiedź 516 wizyt
pytanie zadane 25 lutego 2022 w Python przez marshallrez Nowicjusz (150 p.)
0 głosów
4 odpowiedzi 4,324 wizyt
pytanie zadane 27 lutego 2019 w C i C++ przez de1vee Nowicjusz (220 p.)

93,800 zapytań

142,768 odpowiedzi

323,461 komentarzy

63,420 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...