Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming
Questo mouse ultraleggero, con soli 36 grammi di peso, è stato concepito per offrire un'esperienza di gioco di alto livello ai professionisti degli FPS, grazie al polling rate a 8.000 Hz e a un sensore ottico da 33.000 DPI. La recensione esplora ogni dettaglio di questo dispositivo di gioco, dalla sua agilità estrema alle specifiche tecniche che lo pongono un passo avanti
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni
Dal richiamo di Enrico Letta alla necessità di completare il mercato unico entro il 2028 alla visione di Nokia sul ruolo dell’IA e delle reti intelligenti, il Nokia Innovation Day 2025 ha intrecciato geopolitica e tecnologia, mostrando a Vimercate come la ricerca italiana contribuisca alle sfide globali delle telecomunicazioni
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza
OPPO Reno14 F 5G si propone come smartphone di fascia media con caratteristiche equilibrate. Il device monta processore Qualcomm Snapdragon 6 Gen 1, display AMOLED da 6,57 pollici a 120Hz, tripla fotocamera posteriore con sensore principale da 50MP e generosa batteria da 6000mAh con ricarica rapida a 45W. Si posiziona come alternativa accessibile nella gamma Reno14, proponendo un design curato e tutto quello che serve per un uso senza troppe preoccupazioni.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-02-2014, 09:11   #1
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
[Visual C++] Far comparire una finestra da applicazione console è possibile?

Salve a tutti,
sto lavorando ad un progetto visual C++ 2010, a 64bit in modalità console di windows, insomma modalità testo in prompt dei comandi.

Sto usando OpenGL e OpenCV per elaborare delle immagini, ma mi servirebbe far comparire un bottone nella finestra di OpenGL per chiudere tutta l'elaborazione (assocerei il button_click ad una variabile booleana per fermare un ciclo).

Il problema è che OpenGL non ha una UI nativamente supportata e tutte le librerie che ho trovato in giro (compresa PUI che nel mio caso andava benissimo) sono solo x86 e quando vado a compilare, mi danno errori visto che il progetto è a 64bit. E quindi addio alle librerie gui includibili.

Pertanto avevo pensato una cosa: ma posso fare apparire dal mio progetto console, oltre alla finestra opengl, una finestrella windows con un bottone "STOP" così da interrompere il tutto da lì?

Visto che la mia non è un'applicazione winform, questa cosa è possibile farla senza dover cambiare tutto il progetto?

Come si fa?
Altrimenti non so più dove sbattere la testa...

Grazie anticipatamente a tutti.
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2014, 09:47   #2
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Non so dirti nello specifico di VC++, ma se segui il metodo "classico" per creare una finestra non dovresti avere problemi. Ti conviene inserire il codice in una funzione separata e richiamarla con CreateThread, così puoi gestire i messaggi del sistema senza intaccare la tua elaborazione.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2014, 09:51   #3
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Non so dirti nello specifico di VC++, ma se segui il metodo "classico" per creare una finestra non dovresti avere problemi. Ti conviene inserire il codice in una funzione separata e richiamarla con CreateThread, così puoi gestire i messaggi del sistema senza intaccare la tua elaborazione.
L'idea sarebbe quella...ma come la creo una finestra in modo classico, se sono in modalità console? Mi sta bene farlo in un thread...ma non so come si crea un finestra in modo classico da un'applicazione non winform..
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2014, 11:01   #4
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Crea un progetto winform e copia il sample che viene generato in automatico all'interno del tuo progetto, rinomina la funzione winmain, elimina i parametri (non ti serviranno) e richiamala in un nuovo thread.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2014, 11:14   #5
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Crea un progetto winform e copia il sample che viene generato in automatico all'interno del tuo progetto, rinomina la funzione winmain, elimina i parametri (non ti serviranno) e richiamala in un nuovo thread.
Grazie...vedrò di fare così allora...ti faccio sapere.
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2014, 13:29   #6
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
QT rilascia il codice sorgente, che quindi puoi ricompilare a 64 bits sotto VS2010.
Ovviamente qt e' richiamabile da console project, ed hai una GUI portabile su sistemi diversi.

In alternativa, potresti farti un progetto GUI a parte (con qualsiasi bitness), il quale comunica con la parte console-based mediante TCP/IP socket (o qualsiasi altro modo standard preferisci)
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2014, 10:37   #7
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Ragazzi,
considerando che a me il bottone servirebbe in pratica solo per interrompere tutto il ciclo di elaborazione (passando da false a true una variabile booleana controllata da vari cicli while) su internet trovo che si possa fare anche direttamente da console, associando il cambio variabile ad un evento da tastiera.

Questa cosa come si fa? Perchè in tal caso, eviterei proprio di introdurre ulteriori librerie ad appesantire il programma e farei questa cosa...

Qualcuno sa aiutarmi?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2014, 10:39   #8
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Non puoi semplicemente usare Ctrl+C come si fa da decenni?
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2014, 11:02   #9
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Non puoi semplicemente usare Ctrl+C come si fa da decenni?
Eh, ma come associare a Ctrl+C il fatto di cambiare una variabile booleana?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2014, 13:06   #10
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Non ce ne è bisogno, la combinazione Ctrl+C sia su Windows che su Unix fa terminare il programma senza che quest'ultimo debba implementare nulla.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2014, 13:17   #11
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Non ce ne è bisogno, la combinazione Ctrl+C sia su Windows che su Unix fa terminare il programma senza che quest'ultimo debba implementare nulla.
Ok, però a me serve che quando questa cosa accade, i thread che ho lanciato terminano a cascata in funzione di una variabile booleana, e mi diano l'output dei loro "lavori" non che si chiuda completamente il programma.
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2014, 13:57   #12
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
In questo caso devi implementare un handler e registrarlo al sistema operativo, vedi qui:
http://www.tutorialspoint.com/cplusp...l_handling.htm
http://www.cplusplus.com/forum/beginner/1501/#msg5410
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 11-02-2014, 13:52   #13
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12841
Quote:
Originariamente inviato da DomusP45 Guarda i messaggi
Ok, però a me serve che quando questa cosa accade, i thread che ho lanciato terminano a cascata in funzione di una variabile booleana, e mi diano l'output dei loro "lavori" non che si chiuda completamente il programma.
Se sei su Windows prova questa:

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
WarDuck è online   Rispondi citando il messaggio o parte di esso
Old 11-02-2014, 16:43   #14
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
In questo caso devi implementare un handler e registrarlo al sistema operativo, vedi qui:
http://www.tutorialspoint.com/cplusp...l_handling.htm
http://www.cplusplus.com/forum/beginner/1501/#msg5410
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Grazie...domani in mattinata provo e vi faccio sapere...Grazie davvero.
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2014, 12:31   #15
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Ragazzi, aggiungo un post giusto per far in modo che vi venga notificato:

Ho introdotto queste modifiche nel mio codice:

Codice:
#include <signal.h>

bool forever = false;

//questa è la funzione di handler per la combinazione
void sighandler(int sig)
{
	cout<<endl<<"Segnale n. "<<sig<<" rilevato. Terminazione programma."<<endl;
//cambia il valore della variabile booleana	
forever = true;
}

...
qui ci sono le altre funzioni void, dei thread
...



int main (..)
{

        --altro codice---

        signal(SIGABRT, &sighandler);
	signal(SIGTERM, &sighandler);
	signal(SIGINT, &sighandler);

       while (!forever)
       {
        .....
        }   


        WaitForSingleObject(handle0,INFINITE);
	WaitForSingleObject(handle1,INFINITE);
	WaitForSingleObject(handle2,INFINITE);
	WaitForSingleObject(handle3,INFINITE);
	WaitForSingleObject(handle4,INFINITE);

        ....output del programma...

return 0;
}
ovviamente lo stesso while

Codice:
 while (!forever)
       {
        .....
        }

c'è in tutti i thread, che infatti vengono avviati tutti.

Il problema è che premendo "CTRL+C" il segnale viene rilevato (infatti l'output viene fuori) ma i thread non terminano. E nemmeno la parte del main vincolata a quella booleana.

Sapete darmi una mano per ottenere questo risultato? Che quando quella variabile "globale" diviene true, funzioni come stop?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2014, 13:17   #16
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Devi dichiarare la variabile forever con la parola chiave "volatile" per impedire al compilatore di fare alcune ottimizzazioni che non vanno proprio d'accordo con il multithreading.

Ultima modifica di Daniels118 : 12-02-2014 alle 13:19.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2014, 14:11   #17
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Devi dichiarare la variabile forever con la parola chiave "volatile" per impedire al compilatore di fare alcune ottimizzazioni che non vanno proprio d'accordo con il multithreading.
questa cosa non la sapevo. E come si fa?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2014, 14:18   #18
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Così:

UAHAHAH scusa ma non ho potuto resistere
Si scrive così:
volatile bool forever = false;
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 12-02-2014, 14:24   #19
DomusP45
Senior Member
 
L'Avatar di DomusP45
 
Iscritto dal: Apr 2010
Città: Whiterun
Messaggi: 580
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
Così:

UAHAHAH scusa ma non ho potuto resistere
Si scrive così:
volatile bool forever = false;
Gentilissimo...purtroppo anche se "volatile" non va. I cicli non terminano, come se appunto la variabile non cambiasse...

come posso fare?
__________________
Come la chiami la chiami, la cocozza sempre cocozza è.

Ultima modifica di DomusP45 : 12-02-2014 alle 17:30.
DomusP45 è offline   Rispondi citando il messaggio o parte di esso
Old 13-02-2014, 08:17   #20
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
E' un po' difficile capire dove sia il problema senza vedere l'intero programma, comunque puoi fare una semplice prova, inserendo delle istruzioni di stampa:
Codice:
cout<<"Inizio loop\n";
while (!forever)
{
   .....
   cout<<(forever ? "true\n" : "false\n");
}
cout<<"Fine loop\n";
Il ciclo stamperà continuamente "false", premendo Ctrl+C dovrebbe stampare "Segnale rilevato... Fine loop".
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Nokia Innovation Day 2025: l’Europa ha bisogno di campioni nelle telecomunicazioni Nokia Innovation Day 2025: l’Europa ha bisogno d...
Sottile, leggero e dall'autonomia WOW: OPPO Reno14 F conquista con stile e sostanza Sottile, leggero e dall'autonomia WOW: OPPO Reno...
Destiny Rising: quando un gioco mobile supera il gioco originale Destiny Rising: quando un gioco mobile supera il...
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Nintendo non considera le mod
Dreame inaugura il suo flagship store a ...
OpenAI e Jony Ive: in arrivo un disposit...
TikTok, secondo Trump l'accordo con Xi &...
HUAWEI, tutte le novità dell'even...
Mercedes GenH2 Truck sulle Alpi: oltre 1...
Shadow Leak: ecco come ChatGPT poteva es...
Google Gemini 2.5 batte quasi tutti gli ...
Battlefield 6: i giocatori console non p...
Iliad rinnova l'offerta mobile: tre pian...
HUAWEI Watch GT 6 ufficiale: design al t...
Reggie Townsend di SAS: l’etica dell’IA ...
Startup Marathon in vista del traguardo:...
Xiaomi 15T Series: basta un clic per ott...
Star Citizen diventa pay-to-win? L'ira d...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:30.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v