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

Aplikacja napisana przeze mnie samoistnie się zamyka

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
530 wizyt
pytanie zadane 21 czerwca 2022 w Systemy operacyjne, programy przez MichaelM Bywalec (2,850 p.)

Witam, napisałem program w C++. Kompilator nie generuje żadnych błędów podczas kompilacji. Problem polega na tym, że gdy uruchamiam aplikacje ona się otwiera pojawia się puste okno i się zamyka (system nie generuje błędu "aplikacja nie odpowiada", ani żadnego innego). Aplikacja jest napisana z użyciem WinAPI. Program działa dobrze do czsu, gdy nie zdejme komentarza z tego fragmentu kodu:

case WM_PAINT:
		{
		
			
			PAINTSTRUCT ps;
		    HDC hdc = BeginPaint(hwnd, &ps);
		   while(znak!="A")
		    {
		    	
		    		r1 = lista[i];
		    		i = i+1;
		    		if(znak!=",")
		    		{
		    			r2=lista[i];
		    			i = i+1;
		    			if(znak!=",")
		    			{
		    				r3 = lista[i];
							i = i+1;	
						}
					}
					
					i = i+1;
		    		
		    		g1 = lista[i];
		    		i = i+1;
		    		if(znak!=",")
		    		{
		    			g2=lista[i];
		    			i = i+1;
		    			if(znak!=",")
		    			{
		    				g3 = lista[i];
							i = i+1;	
						}
					}
					
					i = i+1;
					
					b1 = lista[i];
		    		i = i+1;
		    		if(znak!=",")
		    		{
		    			b2=lista[i];
		    			i = i+1;
		    			if(znak!=",")
		    			{
		    				b3 = lista[i];
							i = i+1;	
						}
					}
					
					i=i+2;
		    	
		    	rl = r1+r2+r3;
		    	gl = g1+g2+g3;
		    	bl = b1+b2+b3;
		    	
		    	r = atoi(rl.c_str());
		    	g = atoi(gl.c_str());
		    	b = atoi(bl.c_str());
		    	
		    	SetPixel(hdc, x, y, RGB(r,g,b));
		    	x+1;
			}
		    EndPaint(hwnd, &ps); 
			break;
		}

 

komentarz 22 czerwca 2022 przez VBService Ekspert (256,320 p.)
edycja 22 czerwca 2022 przez VBService

BTW, linia 64  co to?

 x+1;

chyba chodziło Tobie o

x = x + 1;

lub

x++;

lub

x += 1;

 

wydaje Mi się, że ten zapis

case WM_PAINT:
        {
         
             
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
           while(znak!="A")
            {
                 
                    r1 = lista[i];
                    i = i+1;
                    if(znak!=",")
                    {
                        r2=lista[i];
                        i = i+1;
                        if(znak!=",")
                        {
                            r3 = lista[i];
                            i = i+1;    
                        }
                    }
                     
                    i = i+1;
                     
                    g1 = lista[i];
                    i = i+1;
                    if(znak!=",")
                    {
                        g2=lista[i];
                        i = i+1;
                        if(znak!=",")
                        {
                            g3 = lista[i];
                            i = i+1;    
                        }
                    }
                     
                    i = i+1;
                     
                    b1 = lista[i];
                    i = i+1;
                    if(znak!=",")
                    {
                        b2=lista[i];
                        i = i+1;
                        if(znak!=",")
                        {
                            b3 = lista[i];
                            i = i+1;    
                        }
                    }
                     
                    i=i+2;
                 
                rl = r1+r2+r3;
                gl = g1+g2+g3;
                bl = b1+b2+b3;
                 
                r = atoi(rl.c_str());
                g = atoi(gl.c_str());
                b = atoi(bl.c_str());
                 
                SetPixel(hdc, x, y, RGB(r,g,b));
                x+1;
            }
            EndPaint(hwnd, &ps); 
            break;
        }

można zapisać tak

    r1 = lista[i];
    if (znak != ",")
    {
        r2 = lista[++i];
        r3 = lista[++i];
    }
    
    i += 2;
    g1 = lista[i];
    if (znak != ",")
    {
        g2 = lista[++i];
        g3 = lista[++i];
    }
    
    i += 2;
    b1 = lista[i];
    if (znak != ",")
    {
        b2 = lista[++i];
        b3 = lista[++i];
    }                     

    i += 2;

 

1
komentarz 22 czerwca 2022 przez j23 Mędrzec (195,260 p.)
edycja 22 czerwca 2022 przez j23

Dodam jeszcze, że nie widać, by w ciele pętli zmienna znak była zmieniana, zatem ta pętla jak już zacznie się kręcić, to bez końca, ergo aplikacja się zawiesi.


Obsługa WM_PAINT powinna być możliwie krótka. Powinna służyć tylko do odmalowania powierzchni okna i nic więcej. Kontrola powinna być oddana jak najszybciej do pętli komunikatów.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 413 wizyt
pytanie zadane 27 czerwca 2022 w C i C++ przez MichaelM Bywalec (2,850 p.)
0 głosów
1 odpowiedź 168 wizyt
pytanie zadane 1 sierpnia 2016 w Inne języki przez Krótki Użytkownik (760 p.)
0 głosów
0 odpowiedzi 337 wizyt
pytanie zadane 26 marca 2020 w C# przez barti911 Nowicjusz (120 p.)

93,174 zapytań

142,185 odpowiedzi

321,970 komentarzy

62,503 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1157p. - dia-Chann
  2. 1139p. - Łukasz Piwowar
  3. 1131p. - CC PL
  4. 1126p. - Łukasz Eckert
  5. 1118p. - Tomasz Bielak
  6. 1104p. - Michal Drewniak
  7. 1083p. - Marcin Putra
  8. 1078p. - rucin93
  9. 1071p. - rafalszastok
  10. 1054p. - Adrian Wieprzkowicz
  11. 1047p. - Piotr Aleksandrowicz
  12. 1037p. - Michał Telesz
  13. 1023p. - Mariusz Fornal
  14. 1017p. - Mikbac
  15. 1005p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...