• 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

0 głosów
58 wizyt
pytanie zadane 21 czerwca w Systemy operacyjne, programy przez MichaelM Użytkownik (890 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 przez VBService Mędrzec (172,560 p.)
edycja 22 czerwca 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 przez j23 Mędrzec (175,240 p.)
edycja 22 czerwca 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ź 85 wizyt
pytanie zadane 27 czerwca w C i C++ przez MichaelM Użytkownik (890 p.)
0 głosów
1 odpowiedź 123 wizyt
pytanie zadane 1 sierpnia 2016 w Inne języki przez Krótki Użytkownik (760 p.)
0 głosów
0 odpowiedzi 147 wizyt
pytanie zadane 26 marca 2020 w C# przez barti911 Nowicjusz (120 p.)

88,400 zapytań

137,011 odpowiedzi

305,796 komentarzy

58,656 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...