Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-07-2010, 13:46   #1
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
[C++] GUI: esecuzione ciclo fino ad evento..

Salve a tutti,
Avrei bisogno di una dritta.
Perdonate il titolo ma non mi veniva nulla di meglio

Ho una GUI con vari bottoni..Lavora da server e da client contemporaneamente con un applicazione esterna che effettua dei calcoli e restituisce i risultati.
Tramite la GUI invio dei comandi su una porta e ricevo risposte e risultati su altre due porte differenti (questo è imposto dall'applicazione esterna).
Ho un pulsante che avvia il calcolo ed uno che lo ferma.
Vorrei acquisire e mandare a video (magari plottare in un grafico, ma questo lo vediamo dopo semmai) i risultati dopo l'avvio della simulazione finchè non viene premuto il tasto che stoppa il tutto..Come fare?
Credevo bastasse un while che controllasse una variabile globale o direttamente un evento ma non funziona..Una volta entrato nel while non riesco a cliccare altri pulsanti e quindi ad aggiornare la condizione del while.
Spero di non essere stato troppo confusionario.
Attendo suggerimenti, grazie

Francesco

Ultima modifica di fdf86 : 30-07-2010 alle 14:37.
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 30-07-2010, 14:10   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da fdf86 Guarda i messaggi
Credevo bastasse un while che controllasse una variabile globale o direttamente un evento ma non funziona..Una volta entrato nel while non riesco a cliccare altri pulsanti e quindi ad aggiornare la condizione del while.
Così a naso direi che in questo modo il tuo ciclo viene eseguito dal thread dell'event-loop della GUI, quindi lo stai "congelando".
Dovresti delegare ad un altro thread questo lavoro.

Potresti dirci almeno in che linguaggio stai sviluppando, su quale sistema e con che libreria grafica per la GUI?
(Per quanto riguarda il titolo avresti dovuto prima leggere il regolamento, avrei evitato la domanda qui sopra)
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 30-07-2010, 14:26   #3
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
Hai ragione,scusa..stavo giusto dandomi dell'imbecille perchè non avevo scritto cosa uso..poi ho visto che avevi già risposto..
Sto Usando WxDevC++ (uso la WxWidget) su wundows 7...ed uso la winsock.h (ma questo non credo serva).
Si credo che il problema sia proprio quello quindi devo delegare un altro button?

del tipo:

http://www.functionx.com/vccli/general/events.htm

Almeno il concetto insomma..

Scusami ma non sono espertissimo..Per la tesi ( ing Meccanica ) mi serve l'altro programma (OpenModelica per la cronaca) che è in continuo sviluppo..e quindi sono un mese che lavoro su cose mai viste prima..server, interfacce tra linguaggi, ed ora GUI..mi perdonerai spero.

Grazie ancora,
Francesco
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 30-07-2010, 22:09   #4
Teo@Unix
Senior Member
 
L'Avatar di Teo@Unix
 
Iscritto dal: Mar 2009
Messaggi: 753
Quote:
Originariamente inviato da fdf86 Guarda i messaggi
Scusami ma non sono espertissimo..Per la tesi ( ing Meccanica ) mi serve l'altro programma (OpenModelica per la cronaca) che è in continuo sviluppo..e quindi sono un mese che lavoro su cose mai viste prima..server, interfacce tra linguaggi, ed ora GUI..mi perdonerai spero.
ti capisco, tanto di cappello perchè splittare da un cosa all'altra all'inizio non è semplice. Io idem da quando lavoro.... però si impara parecchio così.
Comunque non ho capito bene chi effettua i calcoli... il server? Oppure il tuo client? Semmai prova a fare uno schema.
Se è il client che fa i calcoli, se non ho capito male vuoi un modo per fermare la computazione però hai il problema che la GUI a quel punto non risponde perchè è impegnata nel calcolo. Se è così devi per forza usare un thread separato.
Teo@Unix è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2010, 00:06   #5
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
Grazie..me ne sono accorto..purtroppo all'università (almeno alla mia) si fanno molte cose ma tutte en passant..io approfondisco in genere, per quel che si può approfondire col vecchio/nuovo ordinamento trimestrale..ma poi quando metto da parte un programma per un po' devo ricominciare tutto da capo...
Comunque..Allora lo schema è questo:



Applicazione______________Porte______________GUI


10501
Control Server <------------------------------ Client
comando



10500
Control Client ------------------------------> Server
risposta


10502
Transfer Client ------------------------------> Server
risultati




L'applicazione esterna (OMI ,OpenModelica-Interactive )fa i calcoli..è stata implementata da gente molto esperta (credo e spero ) e quindi è fatta apposta per calcolare, ricevere input e trasmettere output contemporaneamente..
La mia interfaccia serve per settare dei parametri, inviare i comandi di avvio pausa e fine, e visualizzare i risultati..
Le cose funzionano bene..i risultati li scrivo comunque in un file esterno..non vanno persi..Vorrei però visualizzarli mentre eseguo visto che OMI li trasmette..
diciamo che mi servirebbe questo ciclo while da quando clicco start a quando clicco pause o stop..
Appena posto provo a metterci qualcosa del genere..

http://wxforum.shadonet.com/viewtopi...light=delegate
e vi faccio sapere.

Grazie mille

Francesco
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2010, 21:19   #6
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
Ciao a tutti di nuovo..
Dopo una mezza giornata di studio e lavoro sono riuscito a creare quel thread..
Pare funzioni..solo che non riesco a chiamare la Delete() (o la Pause() )da un button diverso da quello dove lo inizializzo:

In GUIsFrm.cpp

Codice:
   
 void GUIsFrm::WxButton2Click(wxCommandEvent& event)
{
   ............
    //creo il thread in WxButton2Click

MyThread *PlotResult = new MyThread(WxMemo2,remoteSocket_res);

       PlotResult->Run(); 
.......
...
//e lo chiudo in WxButton3Click

    
void GUIsFrm::WxButton3Click(wxCommandEvent& event)
{

PlotResult->Delete();

.........
.........

MyThread::MyThread(wxTextCtrl* WxMemo2, SOCKET remoteSocket_res) 
:wxThread(),WxMemo2(WxMemo2),remoteSocket_res(remoteSocket_res) 
{ 
       Create(); 
} 


void* MyThread::Entry() 
{ 
    
    char buf[500];
    int n;
        while(1)
        {
                n=recv(remoteSocket_res, buf, sizeof(buf), 0);
                buf[n]=0;
                (*WxMemo2)<<buf<<"\n";
        
        if(TestDestroy()) 
                         break; 
        }
    return 0; 
}
Vi posto anche altre parti del progetto che non so se siano totalmente corrette e soprattutto ben collocate.(il Progetto si chiama GUIs)

In GUIsFrm.h


Codice:

#include "MyThread.h"

////Dialog Style Start
#undef GUIsFrm_STYLE
#define GUIsFrm_STYLE wxCAPTION | wxSYSTEM_MENU | wxMINIMIZE_BOX | wxCLOSE_BOX
////Dialog Style End



class GUIsFrm : public wxFrame
{
	private:
		DECLARE_EVENT_TABLE();
		
	public:
		GUIsFrm(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("GUIs"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = GUIsFrm_STYLE);
		virtual ~GUIsFrm();
		
		void WxButton1Click(wxCommandEvent& event);
		void WxButton2Click(wxCommandEvent& event);
		void WxButton3Click(wxCommandEvent& event);
		void WxButton4Click(wxCommandEvent& event);
		void GUIsFrmActivate(wxActivateEvent& event);
		void WxButton5Click(wxCommandEvent& event);
		void WxSlider1Scroll(wxScrollEvent& event);
		void WxSlider2Scroll(wxScrollEvent& event);
		void crea_addr(struct sockaddr_in* ,int , char* );
		MyThread *PlotResult; 

................
In MyThread.h

Codice:
#ifndef __MYTHREAD_H 
#define __MYTHREAD_H 


#include <wx/thread.h> 

class MyThread : public wxThread 
{ 
    wxTextCtrl *WxMemo2;
    bool        sim;
    SOCKET      listenSocket_res; 
    SOCKET       remoteSocket_res;


public: 
    MyThread(wxTextCtrl *WxMemo2, SOCKET remoteSocket_res); 
    virtual ExitCode Entry(); 
}; 

#endif


La GUI smette di funzionare quando clicco su un bottone che contiene la Delete(). Non succede se la inserisco nello stesso pulsante in cui lo creo.

Inoltre ho notato che se non inserisco la Delete() funziona abbastanza bene..cioè smette di scrivere risultati (anche perchè il simulatore non ne manda)..Solo non riesco a leggere più nulla se riavvio la simulazione.
devo inizializzare il Thread da qualche altra parte? Eventualmente, È proprio necessaria questa Delete?


Grazie in anticipo
Francesco
fdf86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Meno di 5 euro per il 5G: l'offerta Kena...
World of Warcraft: Forever è il Classic+...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
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: 07:37.


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