Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    10

    [C++] Il programma continua in background

    Ciao a tutti, da un po' di tempo sto lavorando a un programma in c++ usando come compilatore Visual Studio 2013. Proprio oggi ho notato che il programma da me creato non si chiude più, ovvero la finestra (è un applicazione Win32) viene distrutta ma il programma resta attivo in background. Infatti il compilatore mi dà errore LNK1168 perchè il file .exe è ancora in esecuzione e mi tocca aprire il task manager e terminare il processo manualmente. Fino a ieri invece era tutto ok. Cosa può essere? Davvero non riesco a capire non ho apportato nessuna grande modifica al codice!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Praticamente impossibile dire qualcosa senza vedere il codice, soprattutto nella parte dove dovrebbe terminare il programma.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    10
    Già hai ragione ora posto la parte finale perchè il codice intero è molto lungo:
    codice:
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
        MSG        msg;
        bool done = false;
    .....
        while(!done){
    // main loop
        }
    
        KillGLWindow(); // distrugge la finestra
        return msg.wparam;
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma dal ciclo come esce?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    10
    Impostando la variabile done a true:
    codice:
    ...
        done = gest->getFine();
    ...
    Dove gest è un'istanza della classe Gestore, la quale classe gestisce le operazioni principali del programma.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La struttura del codice non è chiarissima ... puoi postarlo tutto ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    10
    Certo, avevo saltato alcune parti per cercare di snellirlo un po' premetto comunque che questo programma è scritto utilizzando le librerie OpenGL. Praticamente è un giochino semplice, in cui vi sono dei frutti e lo scopo è tagliarli (non mi dilungo troppo).
    Questa è la main:

    codice:
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
        MSG        msg;
        bool    done = false;
    
        mouse.init();
        aumento = 8.25f/90.0f;
    
        if (MessageBox(NULL,"Eseguire in modalità fullscreen?", "FullScreen?", MB_YESNO|MB_ICONQUESTION)==IDNO){ // chiede all'utente se vuole che il programma venga eseguito in modalità schermo intero
            fullscreen=false;
        }
    
        if (!CreateGLWindow("Fruit killer :D",640,480,16,fullscreen)){ // crea la finestra
            return 0;
        }
    
        while(!done){
            if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
                if (msg.message==WM_QUIT){
                    done = true;
                }else{
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                }
            }else{
                if(!caricato){ // carico tutti i modelli 3D
                    ShowCursor(FALSE);
    
                    frutta = new Frutti(hDC, &barra, aumento, loading);
                    ortaggi = new Ortaggi(hDC, &barra, aumento, loading);
                    vari = new Vari(hDC, &barra, aumento, loading);
                    scia = new Scia(spade, &mouse, 200);
                    esplosione = new Scia(spade, &mouse, 2000);
                    banane = new Scia(spade, &mouse, 150);
                    esplosione->setSel(0);
                    gest = new Gestore(&hDC, &hInstance, (Frutti*)frutta, (Ortaggi*)ortaggi, (Vari*)vari, &mouse, &spade, scia, esplosione, banane, &writers, &comic, &menu_tex, &splash, &bonus_tex);
                    caricato=true;
                }
                
                if (gest->getCur()){
                    ShowCursor(TRUE);
                }
    
                if (gest->getLuce()){
                    glDisable(GL_LIGHT0);
                }
                else{
                    glEnable(GL_LIGHT0);
                }
    
                if (gest->getNebbia()){
                    glEnable(GL_FOG);
                }
                else{
                    glDisable(GL_FOG);
                }
    
                if ((active && !DrawGLScene())){
                    done=TRUE;
                }else{
                    SwapBuffers(hDC);
                }
    
                if (keys[VK_ESCAPE]){
                    keys[VK_ESCAPE] = FALSE;
                    gest->pausa();
                }
    
                done = gest->getFine();
            }
        }
    
        delete frutta;
        delete ortaggi;
        delete vari;
        delete gest;
        delete scia;
    
        glDisable(GL_LIGHTING);
    
        KillGLWindow();
        return (msg.wParam);
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Controlla che done diventi effettivamente true quando termina il programma.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    10
    Trovato l'errore!! All'inizio del programma, dopo aver caricato gli oggetti riproduco un video di presentazione (formato AVI). Avevo dimenticato di richiamare la funzione che chuide il file AVI adesso è ok, il programma si chiude scusate non me ne ero proprio accordo!!

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.