Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale
NXTPAPER 60 Ultra è il primo smartphone con tecnologia NXTPAPER 4.0 per il display, un ampio IPS da 7,2 pollici. Con finitura anti-riflesso, processore MediaTek Dimensity 7400, fotocamera periscopica e modalità Max Ink per il detox digitale, NXTPAPER 60 Ultra punta a essere il riferimento tra gli smartphone pensati per il benessere degli occhi.
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


Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
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...
The Social Reckoning: il seguito di The ...
iPhone 16 si trova ora su Amazon a soli ...
Amazon fa a pezzi i prezzi dei monitor g...
Componenti hardware e periferiche PC a p...
Pianeta in crisi: 7 su 9 limiti vitali g...
Galaxy S25 FE con taglio di prezzo di 10...
4 robot aspirapolvere e 3 scope elettric...
Nuovissimi Xiaomi 15T e 15T Pro con tagl...
Le agenzie federali americane potranno u...
Smartphone pieghevoli sempre più ...
LG svela le Easy TV, una nuova gamma di ...
L'equipaggio della missione Shenzhou-20 ...
Possibili detriti spaziali del razzo cin...
Amazon distrugge i prezzi: TV OLED LG, i...
Trump studia dazi fino al 100% per sping...
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: 03:37.


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