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 17-03-2004, 21:30   #1
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Utilizzo di semafori sotto linux

Salve a tutti, dovrei realizzare entro pochi giorni un programma che mi serve per l'università nel quale c'è bisogno che io faccia uso di semafori per sincronizzare dei processi. Questo programma deve essere sviluppato in ambiente linux. Ho cercato di documentarmi riguardo la creazione e l'utilizzo dei semafori e ho capito che per dichiarare dei semafori bisogna richiamare la funzione:

int semget(key_t key, int nsems, int flag)

Il mio dubbio riguarda il parametro key.
Non ho capito dove prenderlo e qual'è il suo scopo. Poichè è una questione urgente mi auguro che mi rispondiate al + presto, grazie.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 09:04   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
E' un numero unico che identifica il semaforo (in generale un oggetto condiviso) nell'intero sistema.
Devi usare la stessa key nelle varie applicazioni per utilizzare lo stesso semaforo. Scegli tu un valore.
__________________
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 18-03-2004, 09:15   #3
gabriele81
Senior Member
 
L'Avatar di gabriele81
 
Iscritto dal: Dec 2001
Città: Roma
Messaggi: 542
In pratica il tipo key_t è una ridefinizione del tipo int, devi assegnare tu un valore arbitrario al semaforo, che come ti ha detto ilsensine dovrai utilizzare nel tuo programma per riferirti a quel semaforo quando dovrai farci delle operazioni.
Infatti alla chiamata semop, che serve a cambiare il valore dei semafori, devi passargli quel valore per dirgli su quale semaforo operare. Ora non mi ricordo la sintassi, ma dovrebbe essere proprio il primo parametro.
__________________
Il 90% dei problemi di un computer si trova tra la tastiera e la sedia.
XP2500+@3200+|A7N8X Deluxe|1,25 GB DDR400|Radeon 9550|HD 160+320 GB SATA|WinXP Pro|Fastweb 6 Mb/s
gabriele81 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 09:35   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da gabriele81
Infatti alla chiamata semop, che serve a cambiare il valore dei semafori, devi passargli quel valore per dirgli su quale semaforo operare.
No, credo che tutte le operazioni successive (semop, semctl...) vanno eseguite utilizzando il valore restituito da semget come handle.
__________________
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 18-03-2004, 09:58   #5
gabriele81
Senior Member
 
L'Avatar di gabriele81
 
Iscritto dal: Dec 2001
Città: Roma
Messaggi: 542
Quote:
Originariamente inviato da ilsensine
No, credo che tutte le operazioni successive (semop, semctl...) vanno eseguite utilizzando il valore restituito da semget come handle.

oooooooops....mi sa che hai ragione....volevo far vedere che ne sapevo qualcosa anche io ma ho cannato l'esempio...
__________________
Il 90% dei problemi di un computer si trova tra la tastiera e la sedia.
XP2500+@3200+|A7N8X Deluxe|1,25 GB DDR400|Radeon 9550|HD 160+320 GB SATA|WinXP Pro|Fastweb 6 Mb/s
gabriele81 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 14:10   #6
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
ragazzi vi ringrazio. quindi e ho ben capito dovrei fare una cosa di questo genere:
Codice:
int mutex;
mutex=semget(0, 1, IPC_CREATE); /*creo l'insieme di semafori */
giusto? ora però devo inizializzare il semaforo e devo usare la funzione semctl:


int semctl(int semid, int sem_num, int command, union semun ctl_arg);

ora se ho ben capito i primi due parametri sono rispettivamente il valore restituito da semget e la key che ho passato a semget, ma gli altri due parametri, cioè command e semnum, cosa sono e come li ottengo? io dovrei inizializzare il semaforo al valore 2 in modo tale che entrino nella sezione critica due processi alla volta, come devo fare? inoltre per effettuare le operazioni di wait e signal su questo semaforo come devo fare?
ragazzi vi ringrazio per la vostra disponibilità; rispondendomi mi state facendo un grossissimo favore, grazie!

Ultima modifica di VegetaSSJ5 : 18-03-2004 alle 14:12.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 14:16   #7
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da VegetaSSJ5
semget(0, 1, IPC_CREATE);
Vorresti cortesemente evitare per key dei valori riservati, possibilmente usati da altri o comunque sospetti?

Guarda caso, il valore "0" coincide con IPC_PRIVATE (v. man semget e /usr/include/bits/ipc.h )

Hai a disposizione 2^32 valori, proprio 0 dovevi prendere?
__________________
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 18-03-2004, 14:23   #8
gabriele81
Senior Member
 
L'Avatar di gabriele81
 
Iscritto dal: Dec 2001
Città: Roma
Messaggi: 542
Quote:
Originariamente inviato da VegetaSSJ5
ragazzi vi ringrazio. quindi e ho ben capito dovrei fare una cosa di questo genere:
Codice:
int mutex;
mutex=semget(0, 1, IPC_CREATE); /*creo l'insieme di semafori */
giusto? ora però devo inizializzare il semaforo e devo usare la funzione semctl:


int semctl(int semid, int sem_num, int command, union semun ctl_arg);

ora se ho ben capito i primi due parametri sono rispettivamente il valore restituito da semget e la key che ho passato a semget, ma gli altri due parametri, cioè command e semnum, cosa sono e come li ottengo? grazie ragazzi...

Stavolta mi sono documentato...

alla semctl devi passare nell'ordine:

- identificativo del semaforo (o meglio dell'array di semafori) restituito dalla semget

- numero del semaforo nell'array di semafori su cui eseguire l'operazione

- Tipo di comando

- parametri del comando

Quando tu chiami la semget come secondo parametro specifichi quanti semafori vuoi creare, e nella semctl devi indicare su quale operare (con 0 indichi il primo, con 1 il secondo ecc.). La key serve solo nell'invocazione della semget, poi ti serve l'handle restituita dalla funzione.

I tipi di comando possono essere questi (i più comuni):

- IPC_RMID: per eliminare l'array di semafori identificato da semid; gli altri parametri vengono ignorati

- GETALL: per leggere il valore di tutti i semafori nell'array, i valori vengono copiati in un buffer che il programmatore dovrà creare e passare alla funzione nel campo arg (l'ultimo).

- SETALL: setta i valori di tutti i semafori dell'array leggendo i valori da un buffer precedentemente impostato dal programmatore e passato come ultimo parametro.

- GETVAL: la funzione restituisce il valore del semaforo specificato dal numero passato come secondo argomento, l'ultimo parametro viene ignorato

- SETVAL: imposta il valore del semaforo specificato da sem_num uguale al valore passato come ultimo parametro.
__________________
Il 90% dei problemi di un computer si trova tra la tastiera e la sedia.
XP2500+@3200+|A7N8X Deluxe|1,25 GB DDR400|Radeon 9550|HD 160+320 GB SATA|WinXP Pro|Fastweb 6 Mb/s

Ultima modifica di gabriele81 : 18-03-2004 alle 14:28.
gabriele81 è offline   Rispondi citando il messaggio o parte di esso
Old 18-03-2004, 19:46   #9
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da gabriele81
Stavolta mi sono documentato...

alla semctl devi passare nell'ordine:

- identificativo del semaforo (o meglio dell'array di semafori) restituito dalla semget

- numero del semaforo nell'array di semafori su cui eseguire l'operazione

- Tipo di comando

- parametri del comando

Quando tu chiami la semget come secondo parametro specifichi quanti semafori vuoi creare, e nella semctl devi indicare su quale operare (con 0 indichi il primo, con 1 il secondo ecc.). La key serve solo nell'invocazione della semget, poi ti serve l'handle restituita dalla funzione.

I tipi di comando possono essere questi (i più comuni):

- IPC_RMID: per eliminare l'array di semafori identificato da semid; gli altri parametri vengono ignorati

- GETALL: per leggere il valore di tutti i semafori nell'array, i valori vengono copiati in un buffer che il programmatore dovrà creare e passare alla funzione nel campo arg (l'ultimo).

- SETALL: setta i valori di tutti i semafori dell'array leggendo i valori da un buffer precedentemente impostato dal programmatore e passato come ultimo parametro.

- GETVAL: la funzione restituisce il valore del semaforo specificato dal numero passato come secondo argomento, l'ultimo parametro viene ignorato

- SETVAL: imposta il valore del semaforo specificato da sem_num uguale al valore passato come ultimo parametro.
grazie ragazzi!

x ilsensine
mamma mia che sfortuna che ho! proprio quello ho beccato.... vabbè vorrà dire che metterò come valore 1367, spero non corrisponda a nulla in particolare...

x gabriele81
ti ringrazio molto ora è tutto più chiaro. dunque dovrei fare così:
Codice:
int mutex;
mutex=semget(1367, 1, IPC_CREATE); /*creo l'insieme di semafori */
semctl(mutex, 0, SETVAL, 2); /*inizializzo a due l'unico semaforo che ho creato semaforo */
ragazzi un'ultima cosa: la semctl restituisce un intero, cioè cosa? grazie 2^20
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2004, 08:21   #10
gabriele81
Senior Member
 
L'Avatar di gabriele81
 
Iscritto dal: Dec 2001
Città: Roma
Messaggi: 542
Quote:
Originariamente inviato da VegetaSSJ5
ti ringrazio molto ora è tutto più chiaro. dunque dovrei fare così:
Codice:
int mutex;
mutex=semget(1367, 1, IPC_CREATE); /*creo l'insieme di semafori */
semctl(mutex, 0, SETVAL, 2); /*inizializzo a due l'unico semaforo che ho creato semaforo */
ragazzi un'ultima cosa: la semctl restituisce un intero, cioè cosa? grazie 2^20
Il codice mi sembra giusto, solo una cosa: di solito i mutex hanno valore 0 o 1, se lo inizializzi a 2 dagli un altro nome, giusto per non confondere le idee

La semctl restituisce -1 in caso di errore, oppure il valore del semaforo specificato se come comando hai messo GETVAL, negli altri casi un valore positivo. Quando la invochi ti conviene fare un check sul valore restituito, se è < 0 lanci un errore (o un segnale o quello che ti fa più comodo).
__________________
Il 90% dei problemi di un computer si trova tra la tastiera e la sedia.
XP2500+@3200+|A7N8X Deluxe|1,25 GB DDR400|Radeon 9550|HD 160+320 GB SATA|WinXP Pro|Fastweb 6 Mb/s
gabriele81 è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2004, 10:48   #11
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
perfetto. ragazzi grazie a tutti, cmq credo in questi giorni di avere di nuovo bisogno di voi per cui occhio a questo thread. ciao!
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2004, 14:34   #12
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
ragazzi come non detto, rieccomi qua. dunque spiegamo il problema: io devo creare 2*N (con N dato in input) processi e li devo mettere in attesa ad un semaforo. io ho scritto questo, ma non so come devo usare semop(...) per effettuare le wait e le signal:
Codice:
void genera_giocatori (int N) {
	pid_t giocatori[2*N];
	int i=0;
	int AccessoAlTavolo;
	AccessoAlTavolo=semget(200, 1, IPC_CREAT);
	semctl(AccessoAlTavolo, 0, SETVAL, 0);
	for (i=0; i<2*N; ++i) {
		pid_t pid= fork();
		if (pid!=0) giocatori[i]=pid;
		else if (pid==0) WAIT SEMAFORO ACCESSO AL TAVOLO;
			else {
				perror("Si è verificato un errore durante la creazione dei processi giocatori");
				exit(1);
			}
	}
}
in praticami creo un array dove metto i pid dei processi che ho generato, creo ed inizializzo il semaforo AccessoAlTavolo a 0 (in modo tale che nessun processo appena che io faccia la wait sul semaforo di quel processo mi entri nella sezione critica), faccio una wait al processo appena creato sul semaforo. il problema è: come si usa semop per fare la wait (e la signal)?

inoltre ho un'altra domanda: data l'istruzione
Codice:
pid_t aaa;
aaa=fork();
il processo padre ha in aaa il valore del pid del processo generato. il processo generato (figlio) ha in aaa il valore 0, giusto? ma allora se faccio così
Codice:
pid_t arbitro;
arbitro=fork();
if (arbitro==0) genera_giocatori(n);
quando eseguo il programma, il processo arbitro che ho creato dovrebbe eseguirmi la fork (perchè il processo arbitro ha in arbitro il valore 0 e quindi entra nell'if) invece non lo fa, come mai???

Ultima modifica di VegetaSSJ5 : 19-03-2004 alle 14:36.
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 19-03-2004, 15:44   #13
Tortellone
Senior Member
 
L'Avatar di Tortellone
 
Iscritto dal: Sep 2002
Città: Napoli
Messaggi: 543
Quote:
Originariamente inviato da ilsensine
Vorresti cortesemente evitare per key dei valori riservati, possibilmente usati da altri o comunque sospetti?

Guarda caso, il valore "0" coincide con IPC_PRIVATE (v. man semget e /usr/include/bits/ipc.h )

Hai a disposizione 2^32 valori, proprio 0 dovevi prendere?

Rotfl mi ha fatto divertire molto questo intervento


Tortellone è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2004, 13:27   #14
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
ragazzi il problema precedente è stato risolto, ma ora ho bisogno di nuovo di una vostra piccola mano:
allora, ci sono dei processi giocatori che giocano a due a due e poi alla fine della partita si mettono in pausa con la funzione pause(). Poi c'è il processo arbitro che deve fare dei conti e poi prendere i due processi che hanno ottenuto il punteggio migliore. Ho individuato tali processi e ho ucciso gli altri con kill(PID, SIGKILL), a questo punto dovrei svegliare i due processi che hanno ottenuto punteggio migliore e portarli ad una funzione seconda_fase(). Come faccio a svegliare questi processi e a portarli alla funzione seconda_fase()?
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2004, 14:54   #15
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
[EDIT]
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 25-03-2004, 19:14   #16
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da cn73
[EDIT]
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2004, 08:02   #17
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da VegetaSSJ5
ragazzi il problema precedente è stato risolto, ma ora ho bisogno di nuovo di una vostra piccola mano:
allora, ci sono dei processi giocatori che giocano a due a due e poi alla fine della partita si mettono in pausa con la funzione pause(). Poi c'è il processo arbitro che deve fare dei conti e poi prendere i due processi che hanno ottenuto il punteggio migliore. Ho individuato tali processi e ho ucciso gli altri con kill(PID, SIGKILL), a questo punto dovrei svegliare i due processi che hanno ottenuto punteggio migliore e portarli ad una funzione seconda_fase(). Come faccio a svegliare questi processi e a portarli alla funzione seconda_fase()?
Semplicemente, manda un segnale a tua scelta (ad es. SIGUSR1) ai processi da svegliare.
Normalmente SIGUSR1 causa la terminazione del processo, a meno che non gli assegni una funzione per gestirlo.
v. man signal (o sigaction) per informazioni su come assegnare un handler a un segnale. A te basta una funzione vuota, che evita la terminazione del processo.
__________________
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-03-2004, 09:37   #18
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Quote:
Originariamente inviato da VegetaSSJ5
Mi ero accorto di avere detto una castronata
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2004, 10:41   #19
VegetaSSJ5
Senior Member
 
L'Avatar di VegetaSSJ5
 
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
Quote:
Originariamente inviato da ilsensine
Semplicemente, manda un segnale a tua scelta (ad es. SIGUSR1) ai processi da svegliare.
Normalmente SIGUSR1 causa la terminazione del processo, a meno che non gli assegni una funzione per gestirlo.
v. man signal (o sigaction) per informazioni su come assegnare un handler a un segnale. A te basta una funzione vuota, che evita la terminazione del processo.
ti ringrazio anche se avevo risolto da solo. ho mandato il segnale SIGINT. scusa ma se io il segnale noon lo gestisco, cioè non creo una funzione per gestire sigint, il processo termina? nel caso dovessi creare comunque questa funzione, non potresti scrivermela tu? tieni conto che i processi che devo svegliare sono in pausa...
VegetaSSJ5 è offline   Rispondi citando il messaggio o parte di esso
Old 26-03-2004, 10:56   #20
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
Originariamente inviato da VegetaSSJ5
scusa ma se io il segnale noon lo gestisco, cioè non creo una funzione per gestire sigint, il processo termina?
Normalmente sì. Non so se sigint è ignorato di default.

Quote:
nel caso dovessi creare comunque questa funzione, non potresti scrivermela tu? tieni conto che i processi che devo svegliare sono in pausa...
Così è come farei io:
Codice:
#include <signal.h>
#include <unistd.h>

int last_signal = 0;

void null_sighandler(int signum) {
	last_signal = signum;
	signal(signum, null_sighandler);
}

void do_pause() {
	while(last_signal!=SIGUSR1)
		pause();
	last_signal = 0;
}

int main() {
	signal(SIGUSR1, null_sighandler);
(...)
	do_pause();
}
__________________
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


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, ...
Avio si prepara ai test del Dimostratore...
Space Pioneer ha annunciato le cause del...
Anthropic avrebbe nuovi antibiotici cont...
Scoperto un 'moltiplicatore nascosto' ne...
DREO: a IFA 2026 4 novità fra cui...
Slackbot genera dashboard e microsite de...
Idrogeno, nuova cella a combustibile rag...
Con la NASA fuori dai giochi, l'ESA risc...
Una falla di ChatGPT permette di estrapo...
Piano clima, 1,34 miliardi per il bonus ...
Porsche esce definitvamente da Bugatti R...
NVIDIA App aggiunge una delle funzioni p...
Come sarebbe il mondo se la luce viaggia...
Titanio, ceramica e zaffiro per HUAWEI W...
Taglio delle accise sul gasolio prorogat...
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: 00:47.


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