Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-09-2007, 12:34   #1
PoliX
Member
 
L'Avatar di PoliX
 
Iscritto dal: Jun 2005
Messaggi: 121
[C++] Timer che funziona in background

Salve a tutti

Sto scrivendo un programma in C su Linux (non sono molto esperto, quindi lo faccio in modo molto spartano) e avrei bisogno di un timer che agisce in background (quindi nel frattempo il programma principale continua a girare) e che ad intervalli prestabiliti mi faccia eseguire delle funzioni, dopodichè torna al programma principale fino alla nuova chiamata.

Per windows ho una funzione che però usa librerie windows.h, mentre io ho bisogno di implementarlo in Linux.

Penso che non vadano bene le funzioni sleep, e meno che non riesca a farle eseguire in un thread in background ma non saprei come fare.

Se qualcuno può aiutarmi grazie mille!
PoliX è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 12:37   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Puoi usare obrobri tipo alarm o setitimer, ma io risolverei con un veloce thread dedicato.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 12:53   #3
PoliX
Member
 
L'Avatar di PoliX
 
Iscritto dal: Jun 2005
Messaggi: 121
grazie

Un thread dedicato in cosa consisterebbe e come andrebbe implementato?
Scusa ma non sono molto pratico e non so proprio da dove partire!

Soprattutto è un metodo sicuro?
Non ho bisogno di una precisione al microsecondo, ma una cosa che ogni es. 2 minuti (ripeto non importa un millisecondo in più o in meno, però deve partire) mi fa eseguire una serie di funzioni sui dati acquisiti (e messi in variabili) dal programma principale nel frattempo

grazie di nuovo

Ultima modifica di PoliX : 26-09-2007 alle 13:00.
PoliX è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 12:56   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Non sai cosa sono i thread? Non posso spiegartelo in due righe...

Usa alarm allora, con i thread dovresti gestire eventuali problemi di concorrenza. Se non conosci i thread tantomeno conosci i problemi connessi.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 13:32   #5
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
scusa ma se il programma e´ semplice ti basta chiamare una funzione ad ogni fine o inizio main loop e controllare se il tempo passato e´ >= 2 minuti allora esegui quello che ti serve e resetti il timer senno` fai niente.
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 13:42   #6
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
Puoi usare obrobri tipo alarm o setitimer
perche´ obrobri ?
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 14:10   #7
PoliX
Member
 
L'Avatar di PoliX
 
Iscritto dal: Jun 2005
Messaggi: 121
Quote:
Originariamente inviato da trallallero Guarda i messaggi
scusa ma se il programma e´ semplice ti basta chiamare una funzione ad ogni fine o inizio main loop e controllare se il tempo passato e´ >= 2 minuti allora esegui quello che ti serve e resetti il timer senno` fai niente.
Avevo pensato ad una cosa del genere ma come faccio a vedere quanto tempo è passato?Leggendo l'orologio di sistema?
Inoltre il main loop sta fermo in attesa di leggere da seriale ed a questo punto fa un ciclo, quindi non è detto che possa controllare con continuità il tempo trascorso. Eventualmente dovrei impostare dei timeout della seriale ma preferirei evitarlo.
Sarebbe meglio avere delle chiamate periodiche indipendente dal main.

Scusate se non mi spiego con linguaggio corretto ma di informatica ho dato solo un esame al primo anno di ingegneria!

Per ora sto provando a capire come funziona alarm, grazie per i consigli!

ciao
PoliX è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 14:14   #8
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da trallallero Guarda i messaggi
perche´ obrobri ?
Peché usano degli obrobri (i segnali).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 15:32   #9
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da PoliX Guarda i messaggi
Avevo pensato ad una cosa del genere ma come faccio a vedere quanto tempo è passato?Leggendo l'orologio di sistema?
Inoltre il main loop sta fermo in attesa di leggere da seriale ed a questo punto fa un ciclo, quindi non è detto che possa controllare con continuità il tempo trascorso. Eventualmente dovrei impostare dei timeout della seriale ma preferirei evitarlo.
Sarebbe meglio avere delle chiamate periodiche indipendente dal main.

Scusate se non mi spiego con linguaggio corretto ma di informatica ho dato solo un esame al primo anno di ingegneria!

Per ora sto provando a capire come funziona alarm, grazie per i consigli!

ciao
proprio perche´ sei alle prime armi ti dico di fare una funzione semplice.

Per esempio questo programma stampa "Time To" e ritorna 1 ogni 5 secondi, altrimenti ritorna 0.

Il tutto dentro un loop "ultrasleepato" nel senso che fai una usleep per non impiegare tutte le risorse ma senza rallentarlo troppo (tipo con una sleep).

Codice:
#include <stdio.h>
#include <time.h>

int IsTimeTo()
{
	static time_t Time = 0; 
	

	if (time(NULL) - Time >= 5)
	{
		Time = time(NULL);
		puts( "Time To" );
		return 1;
	}
	return 0;
}

int main(int argc, char* argv[])
{
	while(1)
	{
		IsTimeTo();
		usleep(2000);	
	}	
}
ovviamente non lo puoi usare se usi una read senza O_NONBLOCK (cioe´ devi leggere senza bloccare)
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 16:09   #10
PoliX
Member
 
L'Avatar di PoliX
 
Iscritto dal: Jun 2005
Messaggi: 121
si grazie, per ora penso che adotterò questa soluzione.
Nella read ho il O_NONBLOCK, però i devo vedere come impostare i timeout della seriale perchè fino ad ora erano ad attesa infinita.

Poi vedrò come andrà nel programma finale e quali errori di temporizzazione mi comporta (che più o meno sarà al massimo del tempo di un loop, ma non so questo di che ordine sia)
PoliX è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 19:39   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
Non sai cosa sono i thread? Non posso spiegartelo in due righe...
ti sfido
ecco la mia spiegazione:

@PoliX: un programma può essere costituito da più parti che girano contemporaneamente: si chiamano thread. su Linux per eseguire una funzione contemporaneamente al resto del programma puoi usare la funzione pthread_create.

una riga virgola 6 sul mio monitor (1280x1024), prova a far di meglio
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 26-09-2007, 19:42   #12
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
Peché usano degli obrobri (i segnali).
HA-HA!! allora lo ammettete anche voi
questa devo dire che mi coglie alla sprovvista
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2007, 09:47   #13
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da 71104 Guarda i messaggi
HA-HA!! allora lo ammettete anche voi
questa devo dire che mi coglie alla sprovvista
I segnali sono indispensabili in alcuni casi (ad es. SIGSEGV, SIGILL, ...), ma nel tempo se ne è veramente abusato (v. ad es. dnotify).
Ultimamente è stata sviluppata una nuova interfaccia, finalmente decente, per la gestione dei segnali (signalfd).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2007, 09:49   #14
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da 71104 Guarda i messaggi
ti sfido
ecco la mia spiegazione:

@PoliX: un programma può essere costituito da più parti che girano contemporaneamente: si chiamano thread. su Linux per eseguire una funzione contemporaneamente al resto del programma puoi usare la funzione pthread_create.

una riga virgola 6 sul mio monitor (1280x1024), prova a far di meglio
Spero che non segua la tua sintetica descrizione, si ritroverebbe in un mare di guai
Non puoi parlare dei thread senza parlare dei problemi di concorrenza
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2007, 14:21   #15
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
I segnali sono indispensabili in alcuni casi (ad es. SIGSEGV, SIGILL, ...), ma nel tempo se ne è veramente abusato (v. ad es. dnotify).
se fa schifo uno fanno schifo tutti: io trovo assurdo che un thread di punto in bianco debba eseguire una cosa completamente diversa e che il suo stack a partire da un certo punto contenga frames che non ci azzeccano nulla con quelli precedenti (magari oltrettutto con un frame interrotto a metà). una feature o ci sta o non ci sta, e quando ci sta rassegnati all'idea che tutti la usano, senza compromessi. è la stessa cosa che succede nei linguaggi di programmazione, è il motivo percui PGI-Bis conduce la sua strenua battaglia contro le closures nel Java e a favore della filosofia POJO.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2007, 14:23   #16
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
Spero che non segua la tua sintetica descrizione, si ritroverebbe in un mare di guai
Non puoi parlare dei thread senza parlare dei problemi di concorrenza
ho affidato tutto alla sua ragione :P
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2007, 14:25   #17
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
LUNGA VITA AI POJO!
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 27-09-2007, 14:37   #18
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da 71104 Guarda i messaggi
se fa schifo uno fanno schifo tutti: io trovo assurdo che un thread di punto in bianco debba eseguire una cosa completamente diversa e che il suo stack a partire da un certo punto contenga frames che non ci azzeccano nulla con quelli precedenti (magari oltrettutto con un frame interrotto a metà). una feature o ci sta o non ci sta, e quando ci sta rassegnati all'idea che tutti la usano, senza compromessi. è la stessa cosa che succede nei linguaggi di programmazione, è il motivo percui PGI-Bis conduce la sua strenua battaglia contro le closures nel Java e a favore della filosofia POJO.
No, lo scopo dei segnali - originariamente - era proprio quello: gestire una cosa "completamente diversa", dove il programma poteva essere benissimo andato a puttane (ad esempio perché il processo è andato...in segmentation fault, fornendo l'estrema possibilità di eseguire codice per generare ad es. un backtrace). Anche SIGILL può prestarsi a interessanti usi (ad es. emulazione in userspace di istruzioni assembler non supportate).
Tutti gli altri usi che se ne sono fatti sono dovuti a limitazioni dei sistemi unix, che non fornivano alternative su come fare certe cose. Oggi le alternative ci sono, e i segnali possono benissimo essere abbandonati, ad eccezione di quelli fatali (SEGV, ILL, e simili). Almeno su linux.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2007, 02:43   #19
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da ilsensine Guarda i messaggi
No, lo scopo dei segnali - originariamente - era proprio quello: gestire una cosa "completamente diversa", dove il programma poteva essere benissimo andato a puttane (ad esempio perché il processo è andato...in segmentation fault, fornendo l'estrema possibilità di eseguire codice per generare ad es. un backtrace).
se per "backtrace" intendi un dump allora preferisco un tipo di approccio completamente diverso: tra un sistema operativo con DrWtsn32.exe e un sistema operativo coi segnali preferisco 1000 volte la prima

non per altro ma perché se poi su quel sistema operativo io ci devo programmare per studio ed in futuro per lavoro, allora preferisco non aver nulla a che fare coi segnali


Quote:
Anche SIGILL può prestarsi a interessanti usi (ad es. emulazione in userspace di istruzioni assembler non supportate).
a mio parere questa non è una argomentazione sufficiente a giustificare un design come quello dei segnali: su Windows esistono le eccezioni, non potevano fare qualcosa del genere? non è che segnali ed eccezioni siano due cose tanto differenti alla fine, solo che la seconda ha il pregio di mantenere uno stato di coerenza nello stack.

Ultima modifica di 71104 : 28-09-2007 alle 02:46.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2007, 09:46   #20
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da 71104 Guarda i messaggi
se per "backtrace" intendi un dump allora preferisco un tipo di approccio completamente diverso: tra un sistema operativo con DrWtsn32.exe e un sistema operativo coi segnali preferisco 1000 volte la prima

non per altro ma perché se poi su quel sistema operativo io ci devo programmare per studio ed in futuro per lavoro, allora preferisco non aver nulla a che fare coi segnali


a mio parere questa non è una argomentazione sufficiente a giustificare un design come quello dei segnali: su Windows esistono le eccezioni, non potevano fare qualcosa del genere? non è che segnali ed eccezioni siano due cose tanto differenti alla fine, solo che la seconda ha il pregio di mantenere uno stato di coerenza nello stack.
I segnali sono un design nato quando Bill Gates ancora aveva il ciuccio, come fai a paragonarli con ciò che hai a disposizione su windows lo sai solo tu.
Ovvio che _oggi_ ti sembrano obsoleti, e non mi sembra che li sto difendendo.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
La capsula SpaceX Dragon CRS-33 ha acces...
La NASA è sempre più vicin...
Crisi delle memorie: ASUS torna al passa...
Le console next-generation potrebbero es...
Gemini cresce ancora: la quota di mercat...
Samsung sfida TSMC: la capacità produtti...
Iliad alza il prezzo della fibra ottica ...
Il prossimo low cost di POCO sarà il più...
The Elder Scrolls VI: ecco le ultime sul...
Ecco i saldi di fine anno Amazon, 34 off...
iPhone Fold: scorte limitate al lancio m...
OpenAI porterà la pubblicità in ChatGPT ...
TSMC aumenterà ancora i prezzi: nel 2026...
Marvel pubblica anche il secondo teaser ...
Nuovo accordo tra xAI e il Pentagono: l'...
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: 15:43.


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