|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
[C++] Eseguire un "refresh" in background
Ciao, ho realizzato un programma che si interfaccia con il router usando le winsock e la porta telnet. Ho un problema: dopo un certo tempo di inattività il router chiude la connessione. Come faccio per mettere un refresh ad intervalli regolari mentre il programma continua le sue funzioni?
Come refresh mi basta l'invio di un pwd. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Compilatore ? Librerie usate ?
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
Il compilatore è Dev-Cpp (Vecchio, stravecchio, abbandonato e ancora vecchio, lo so, ma è quello che usiamo a scuola)
Le librerie sono: #include <iostream> #include <conio2.h> #include <winsock.h> |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
Quindi?
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Spiega meglio cosa ti serve in particolare. Cosa ti manca per inviare un pwd ad intervalli regolari ? Usi i thread ?
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
Quote:
Ad intervalli di (esempio) 2 minuti, se non c'è attività nel programma, deve inviare un "pwd\n" senza però interrompere il resto del programma. Cioè l'utente deve sempre poter interagire. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ok, allora puoi creare un thread con CreateThread oppure puoi creare un timer con SetTimer. Magari puoi creare un timer che lancia un thread, forse è la soluzione migliore
Ogni volta che l'utente esegue un comando usi KillTimer per uccidere il timer ed inserirne uno nuovo. http://msdn.microsoft.com/en-us/library/ms644906.aspx http://msdn.microsoft.com/en-us/libr...53(VS.85).aspx |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
Perfetto, è quello che cercavo. Ora provo a capire come funzionano queste funzioni, ma non so a che punto riesco ad arrivare... Mi sembrano abbastanza complicate...
Comunque diciamo che posso fare a meno di killare il timer. L'importante è che mentre viene eseguito il pwd e lo svuotamento della cache della winsock il programma principale non faccia operazioni sulla rete. Devo vedere un po' come fare... |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Fai prima a killare il timer, te lo assicuro.
Cerca con il nome della funzione, troverai sicuramente degli esempi. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Tanto per chiarire: quelle che ti ho dato sono API Win32...non codice C standard
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
Uhm sennò stavo pensando di cambiare il comando da dargli.
Il mio problema è che leggo ciò che il router risponde per mostrarlo a schermo o per analizzare il tipo di risposta. Se mentre faccio un'operazione del genere mi parte il pwd la cache della winsock comprenderà la risposta del comando inviato dal thread principale e quella del pwd. Se io però metto "./\n", non dovrei avere risposta. No? EDIT: Come funziona il timer? Cioè come va messo? E' tipo Sleep()? Ultima modifica di MrModd : 23-02-2009 alle 20:39. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non ho capito cosa intendi sinceramente
Perché chiami in causa la cache ?
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
Scusa intendevo buffer: ciò che recv() scrive su variabile. Se non uso questa funzione si accodano tutte le risposte del server e ciò non va bene. Devo svuotarla prima del pwd.
EDIT: Ci sto capendo qualcosa. Ora ci giocherello un po' e domani ti faccio sapere a che punto sto. Ultima modifica di MrModd : 23-02-2009 alle 20:52. |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
Il thread ora funziona egregiamente (tranne un problema che mi da se lo creo da una funzione diversa da main) però non ho capito come si usa SetTimer().
EDIT: Ho trovato un'alternativa molto più semplice ed elegante al SetTimer(): SuspendThread() e ResumeThread(). Tra l'altro è anche molto più semplice da gestire; con SetTimer() avrei problemi con le variabili, dato che il timer è avviato in una funzione e il punto da cui dovrei eliminarlo è in un'altra funzione. EDIT2: Una domanda. Su questo esempio a che serve tutto ciò che riguarda l'array pDataArray[MAX_THREADS]? Ho provato ad eliminarlo e funziona lo stesso. Se è inutile mi libererebbe un po' di righe di codice. Ultima modifica di MrModd : 24-02-2009 alle 19:16. |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
Up...
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
Ok, quindi siccome non devo trasferire dati da thread a thread lo posso eliminare. Posso risparmiare qualche riga di codice.
Grazie per l'aiuto! Ciao. |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non da thread a thread, ma da chiamante a thread.
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Apr 2007
Messaggi: 924
|
Ah beh comunque non mi serve.
Giusto per curiosità, è possibile trasferire dati da thread a thread? |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì, ma devi usare della memoria condivisa e tecniche per la mutua esclusione.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:21.












Perché chiami in causa la cache ?








