Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Lenovo ha lanciato il ThinkTab X11 rimettendo piede nel segmento dei tablet Android con il marchio Think dopo oltre un decennio di assenza. Il risultato è un dispositivo che prende una direzione precisa: massima dotazione funzionale, costruzione resistente, autonomia fuori dagli schemi
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI è l'appuntamento annuale con il quale l'azienda americana mostra quelle che sono le proprie novità dal versante datacenter. Tra piattaforma Helios, GPU Instinct MI455X e processori EPYC di sesta generazione tutto quello che serve per processare l'IA sempre più complessa ed esigente
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
BOOX Go 6 Gen II porta per la prima volta il supporto allo stilo su un e-reader da 6 pollici, affiancando 3 GB di RAM al collaudato Snapdragon 665 e un design rivisto con scocca posteriore a costolature. Su carta la proposta è interessante, ma Android 11 fuori supporto, l'assenza di un alloggiamento per il pennino e un'autonomia ridotta rispetto agli e-reader tradizionali sono i compromessi da accettare
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-02-2011, 19:54   #1
markz88
Junior Member
 
Iscritto dal: May 2007
Messaggi: 28
[c] Tempo di esecuzione di un algoritmo

Salve,
volevo chiedere come poter calcolare in C il tempo di esecuzione di un pezzo di programma, io ho adottato questo metodo:

Codice:
#include <time.h>

int main(){

clock_t inizio, fine;
double tempo;

inizio = clock();

/*pezzo di codice*/

fine = clock();

tempo = (double)(fine - inizio)/(double) CLOCKS_PER_SEC;

printf("Il tempo di esecuzione e': %f", tempo);

system("pause");
return 0;
}
ma il tempo è espresso in secondi, quando il tempo di esecuzione è minore del secondo il tempo stampato è 0.000000. Come potrei fare per calcolare il tempo di esecuzione in millisecondi per poter avere dei valori? Devo scrivere una relazione tenendo conto del tempo di esecuzione di alcuni algoritmi quindi non posso considerare lo 0. Come potrei fare? Conoscete un altro metodo?

Grazie
markz88 è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2011, 20:21   #2
Shinnok.Exor
Senior Member
 
L'Avatar di Shinnok.Exor
 
Iscritto dal: Jan 2008
Messaggi: 1056
Quote:
Originariamente inviato da markz88 Guarda i messaggi
Codice:
...
tempo = (double)(fine - inizio)/(double) CLOCKS_PER_SEC;
...
Beh se lo dividi per CLOCKS_PER_SEC certo che restituisce il tempo in secondi.
__________________
Apps Freeware made by me
Shinnok.Exor è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2011, 21:13   #3
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 13023
Sei sotto Windows o sotto Linux?

Sotto Windows ci sono le funzioni QueryPerformanceCounter e QueryPerformanceFrequency.

http://msdn.microsoft.com/en-us/libr...=VS.85%29.aspx

Ultima modifica di WarDuck : 07-02-2011 alle 21:16.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 07-02-2011, 21:50   #4
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
Ti conviene inoltre eseguire "/*pezzo di codice*/" qualche centinaio di migliaia di volte, in modo da poter rilevare differenze apprezzabili.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
Old 08-02-2011, 08:57   #5
markz88
Junior Member
 
Iscritto dal: May 2007
Messaggi: 28
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Sei sotto Windows o sotto Linux?

Sotto Windows ci sono le funzioni QueryPerformanceCounter e QueryPerformanceFrequency.

http://msdn.microsoft.com/en-us/libr...=VS.85%29.aspx
Quale dovrei utilizzare tra le due funzioni? Non è che mi metteresti un esempio di codice...
markz88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2011, 15:06   #6
markz88
Junior Member
 
Iscritto dal: May 2007
Messaggi: 28
Per favore come posso esprimere il tempo in millisecondi?? E' urgente
markz88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2011, 16:54   #7
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
Sotto Windows, il modo più preciso (mooolto preciso, mi pare che si possa arrivare alla precisione di meno di un nanosecondo) è di usare il Performance Counter, questo è un esempio:

Codice:
#include <windows.h>
...
LARGE_INTEGER a, b, oh, freq;
double tempo;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&a);
QueryPerformanceCounter(&b);
oh.QuadPart = b.QuadPart - a.QuadPart;
QueryPerformanceCounter(&a);
//Inserisci qui il codice da eseguire
QueryPerformanceCounter(&b);
tempo = (double)(b.QuadPart - a.QuadPart - oh.QuadPart)/freq;
Questo ti restituirà il tempo in secondi. Se vuoi i millisecondi ti basta moltiplicare quel valore per 1000.
La parte iniziale è il calcolo dell'overhead, cioè serve per aumentare l'accuratezza rimuovendo il tempo necessario alla chiamata della funzione QueryPerformanceCounter.
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2011, 17:11   #8
markz88
Junior Member
 
Iscritto dal: May 2007
Messaggi: 28
Quote:
Originariamente inviato da Supdario Guarda i messaggi
Sotto Windows, il modo più preciso (mooolto preciso, mi pare che si possa arrivare alla precisione di meno di un nanosecondo) è di usare il Performance Counter, questo è un esempio:

Codice:
#include <windows.h>
...
LARGE_INTEGER a, b, oh, freq;
double tempo;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&a);
QueryPerformanceCounter(&b);
oh.QuadPart = b.QuadPart - a.QuadPart;
QueryPerformanceCounter(&a);
//Inserisci qui il codice da eseguire
QueryPerformanceCounter(&b);
tempo = (double)(b.QuadPart - a.QuadPart - oh.QuadPart)/freq;
Questo ti restituirà il tempo in secondi. Se vuoi i millisecondi ti basta moltiplicare quel valore per 1000.
La parte iniziale è il calcolo dell'overhead, cioè serve per aumentare l'accuratezza rimuovendo il tempo necessario alla chiamata della funzione QueryPerformanceCounter.

Grazie mille ma con DevC++ mi da l'errore:

"Invalid operands to binary /"

sulla stringa

Codice:
tempo = (double)(b.QuadPart - a.QuadPart - oh.QuadPart)/freq;

Ultima modifica di markz88 : 09-02-2011 alle 17:25.
markz88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2011, 18:04   #9
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
Errore mio, devi dividere per freq.QuadPart
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2011, 18:19   #10
Shinnok.Exor
Senior Member
 
L'Avatar di Shinnok.Exor
 
Iscritto dal: Jan 2008
Messaggi: 1056
Quote:
Originariamente inviato da Shinnok.Exor Guarda i messaggi
Beh se lo dividi per CLOCKS_PER_SEC certo che restituisce il tempo in secondi.
Volevo dire di togliere la divisione per CLOCKS_PER_SEC.

Quote:
Originariamente inviato da Supdario Guarda i messaggi
Sotto Windows, il modo più preciso (mooolto preciso, mi pare che si possa arrivare alla precisione di meno di un nanosecondo) è di usare il Performance Counter, questo è un esempio:

Codice:
#include <windows.h>
...
LARGE_INTEGER a, b, oh, freq;
double tempo;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&a);
QueryPerformanceCounter(&b);
oh.QuadPart = b.QuadPart - a.QuadPart;
QueryPerformanceCounter(&a);
//Inserisci qui il codice da eseguire
QueryPerformanceCounter(&b);
tempo = (double)(b.QuadPart - a.QuadPart - oh.QuadPart)/freq;
Questo ti restituirà il tempo in secondi. Se vuoi i millisecondi ti basta moltiplicare quel valore per 1000.
La parte iniziale è il calcolo dell'overhead, cioè serve per aumentare l'accuratezza rimuovendo il tempo necessario alla chiamata della funzione QueryPerformanceCounter.
clock(); funziona allo stesso modo.
Ritorna il numero di cicli di clock della CPU fino a quel momento, ed è la misurazione di temporizzazione più precisa che puoi fare su un PC, in quanto non esistono secondi, microsecondi e nanosecondi come di tu, ma solo cicli di clock del generatore.

Quindi clock () (standard, quindi funzionerà su tutti i PC che implementano librerie C) e QueryPerformanceCounter() (non portabile) fanno esattamente la stessa cosa, anzi quasi sicuramente QueryPerformanceCounter () usa clock() per recuperare il numero di clock . Non dividendo il risultato di clock(); per CLOCKS_PER_SEC recuperi il numero di cicli di clock.

Ti consiglio di usare clock() che almeno è portabile tra i SO

Codice:
#include <time.h>

int main() {
clock_t inizio;
long tempo_esec;

inizio = clock();

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

tempo_esec = (clock() - inizio) / (CLOCKS_PER_SEC / 3600) // TEmpo di esec in millisecondi

}
__________________
Apps Freeware made by me

Ultima modifica di Shinnok.Exor : 09-02-2011 alle 18:29.
Shinnok.Exor è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2011, 18:55   #11
markz88
Junior Member
 
Iscritto dal: May 2007
Messaggi: 28
Quote:
Originariamente inviato da Shinnok.Exor Guarda i messaggi
Volevo dire di togliere la divisione per CLOCKS_PER_SEC.



clock(); funziona allo stesso modo.
Ritorna il numero di cicli di clock della CPU fino a quel momento, ed è la misurazione di temporizzazione più precisa che puoi fare su un PC, in quanto non esistono secondi, microsecondi e nanosecondi come di tu, ma solo cicli di clock del generatore.

Quindi clock () (standard, quindi funzionerà su tutti i PC che implementano librerie C) e QueryPerformanceCounter() (non portabile) fanno esattamente la stessa cosa, anzi quasi sicuramente QueryPerformanceCounter () usa clock() per recuperare il numero di clock . Non dividendo il risultato di clock(); per CLOCKS_PER_SEC recuperi il numero di cicli di clock.

Ti consiglio di usare clock() che almeno è portabile tra i SO

Codice:
#include <time.h>

int main() {
clock_t inizio;
long tempo_esec;

inizio = clock();

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

tempo_esec = (clock() - inizio) / (CLOCKS_PER_SEC / 3600) // TEmpo di esec in millisecondi

}
Seguendo il metodo da te consigliatomi mi da l'errore [Warning] Division by zero ed il programma crasha
markz88 è offline   Rispondi citando il messaggio o parte di esso
Old 09-02-2011, 19:02   #12
Shinnok.Exor
Senior Member
 
L'Avatar di Shinnok.Exor
 
Iscritto dal: Jan 2008
Messaggi: 1056
Quote:
Originariamente inviato da markz88 Guarda i messaggi
Seguendo il metodo da te consigliatomi mi da l'errore [Warning] Division by zero ed il programma crasha
uhm mi sa che ho sbagliato il calcolo, prova:

Codice:
tempo_esec = ((clock() - inizio)/CLOCKS_PER_SEC)*3600
Insomma,

Codice:
tempo_esec =(clock() - inizio)/CLOCKS_PER_SEC
ti ritorna il tempo di esecuzione in secondi, sai matematicamente come portare quei secondi in millisecondi.
__________________
Apps Freeware made by me
Shinnok.Exor è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2011, 00:11   #13
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
Codice PHP:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

#include <windows.h>

int main(int argcchar *argv[])
{

    
SYSTEMTIME sysTime;
    
FILETIME fileTime;
    
    
LARGE_INTEGER start;
    
LARGE_INTEGER end;
    
LARGE_INTEGER diff;

    
    
GetLocalTime(&sysTime);    
    
SystemTimeToFileTime(&sysTime, &fileTime);
    
memcpy(&start, &fileTimesizeof(LARGE_INTEGER));
    
    
Sleep(1000); // 1 Secondo

    
GetLocalTime(&sysTime);    
    
SystemTimeToFileTime(&sysTime, &fileTime);
    
memcpy(&end, &fileTimesizeof(LARGE_INTEGER));
    
    
diff.QuadPart end.QuadPart start.QuadPart;
    
    
printf("%22lld - \n",end.QuadPart);
    
printf("%22lld = \n",start.QuadPart);
    
printf("------------------------ \n");
    
printf("%22lld x 100-nanosecond = %lld seconds \n",diff.QuadPart ,diff.QuadPart/10000000 );

    return 
0;

__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati.
bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2011, 11:08   #14
markz88
Junior Member
 
Iscritto dal: May 2007
Messaggi: 28
Quote:
Originariamente inviato da bobbytre Guarda i messaggi
Codice PHP:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

#include <windows.h>

int main(int argcchar *argv[])
{

    
SYSTEMTIME sysTime;
    
FILETIME fileTime;
    
    
LARGE_INTEGER start;
    
LARGE_INTEGER end;
    
LARGE_INTEGER diff;

    
    
GetLocalTime(&sysTime);    
    
SystemTimeToFileTime(&sysTime, &fileTime);
    
memcpy(&start, &fileTimesizeof(LARGE_INTEGER));
    
    
Sleep(1000); // 1 Secondo

    
GetLocalTime(&sysTime);    
    
SystemTimeToFileTime(&sysTime, &fileTime);
    
memcpy(&end, &fileTimesizeof(LARGE_INTEGER));
    
    
diff.QuadPart end.QuadPart start.QuadPart;
    
    
printf("%22lld - \n",end.QuadPart);
    
printf("%22lld = \n",start.QuadPart);
    
printf("------------------------ \n");
    
printf("%22lld x 100-nanosecond = %lld seconds \n",diff.QuadPart ,diff.QuadPart/10000000 );

    return 
0;

Ti ringrazio mille per il codice, funziona

Ma vorrei porti una domanda, come mai per trasfomare i microsecondi in secondi dividi per 10.000.000 e non per 1.000.000 come indicato nella tabella di conversione della matematica?
markz88 è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2011, 11:36   #15
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
Quote:
Originariamente inviato da markz88 Guarda i messaggi
Ti ringrazio mille per il codice, funziona

Ma vorrei porti una domanda, come mai per trasfomare i microsecondi in secondi dividi per 10.000.000 e non per 1.000.000 come indicato nella tabella di conversione della matematica?
L'avevo scritto nel printf , dipende dal fatto che non sono microsecondi ma un ordine di grandezza inferiore (100-ns cioe' 10^-7)

la struct FILETIME contiene appunto:
FILETIME Structure

Contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601 (UTC).
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati.
bobbytre è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2011, 14:53   #16
||ElChE||88
Senior Member
 
Iscritto dal: Dec 2003
Messaggi: 4908
Quote:
Originariamente inviato da Shinnok.Exor Guarda i messaggi
clock(); funziona allo stesso modo.
Ritorna il numero di cicli di clock della CPU fino a quel momento, ed è la misurazione di temporizzazione più precisa che puoi fare su un PC, in quanto non esistono secondi, microsecondi e nanosecondi come di tu, ma solo cicli di clock del generatore.

Quindi clock () (standard, quindi funzionerà su tutti i PC che implementano librerie C) e QueryPerformanceCounter() (non portabile) fanno esattamente la stessa cosa, anzi quasi sicuramente QueryPerformanceCounter () usa clock() per recuperare il numero di clock . Non dividendo il risultato di clock(); per CLOCKS_PER_SEC recuperi il numero di cicli di clock.
Ma anche no, dipende dall'implementazione. Quella di Windows ha una precisione di millisecondi, non microsecondi come QueryPerformanceCounter.
||ElChE||88 è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2011, 15:03   #17
markz88
Junior Member
 
Iscritto dal: May 2007
Messaggi: 28
Grazie a tutti per le risposte
markz88 è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2011, 16:29   #18
Supdario
Member
 
Iscritto dal: Mar 2008
Messaggi: 267
Quote:
Originariamente inviato da Shinnok.Exor Guarda i messaggi
Volevo dire di togliere la divisione per CLOCKS_PER_SEC.



clock(); funziona allo stesso modo.
Ritorna il numero di cicli di clock della CPU fino a quel momento, ed è la misurazione di temporizzazione più precisa che puoi fare su un PC, in quanto non esistono secondi, microsecondi e nanosecondi come di tu, ma solo cicli di clock del generatore.

Quindi clock () (standard, quindi funzionerà su tutti i PC che implementano librerie C) e QueryPerformanceCounter() (non portabile) fanno esattamente la stessa cosa, anzi quasi sicuramente QueryPerformanceCounter () usa clock() per recuperare il numero di clock . Non dividendo il risultato di clock(); per CLOCKS_PER_SEC recuperi il numero di cicli di clock.

Ti consiglio di usare clock() che almeno è portabile tra i SO

Codice:
#include <time.h>

int main() {
clock_t inizio;
long tempo_esec;

inizio = clock();

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

tempo_esec = (clock() - inizio) / (CLOCKS_PER_SEC / 3600) // TEmpo di esec in millisecondi

}
Non è esattamente così.
La funzione clock() del C returna una certa quantità di clock, che però non sono i cicli di clock del processore, ma si basano su una costante CLOCKS_PER_SEC sempre fissa, decisa dal compilatore (di solito è qualcosa tipo 1000000).
Invece il PerformanceCounter usa direttamente la frequenza del processore come unità di misura (quindi se il tuo processore è da 3 GHz, avrai 1/(3 GHz) di risoluzione, cioè 0.33 nanosecondi).

In ogni caso concordo sul fatto che forse in questo caso la funzione clock() del C è più appropriata, sia perché non penso che gli sia richiesta tantissima precisione, ed inoltre è portabile.
Supdario è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2011, 18:04   #19
markz88
Junior Member
 
Iscritto dal: May 2007
Messaggi: 28
Quote:
Originariamente inviato da Supdario Guarda i messaggi
Non è esattamente così.
La funzione clock() del C returna una certa quantità di clock, che però non sono i cicli di clock del processore, ma si basano su una costante CLOCKS_PER_SEC sempre fissa, decisa dal compilatore (di solito è qualcosa tipo 1000000).
Invece il PerformanceCounter usa direttamente la frequenza del processore come unità di misura (quindi se il tuo processore è da 3 GHz, avrai 1/(3 GHz) di risoluzione, cioè 0.33 nanosecondi).

In ogni caso concordo sul fatto che forse in questo caso la funzione clock() del C è più appropriata, sia perché non penso che gli sia richiesta tantissima precisione, ed inoltre è portabile.
Si ma a me serve sapere il tempo di esecuzione degli algoritmi di ordinamento Bubblesort, Insertionsort, Selectionsort, Mergesort e Heapsort presenti nel mio programma ed utilizzando la funzione clock() ottengo come tempo di esecuzione 0 secondi e non posso costruire i grafici, capite? Invece con quello scritto da bobbytre ottengo un numero moltiplicato per 10^-7 su cui mi posso basare per costruire dei grafici... ma sinceramente non so quale unità di misura poter usare xD visto che non sono ne millisecondi ne nanosecondi se non ho capito male xD aiutooooo!! Se volessi utilizzare clock() con la variabile tempo di tipo double e finish e start di tipo clock_t, l'espressione corretta è:

Codice:
tempo = (double)(finish - start)/CLOCKS_PER_SEC;
oppure no?

Ultima modifica di markz88 : 10-02-2011 alle 19:20.
markz88 è offline   Rispondi citando il messaggio o parte di esso
Old 10-02-2011, 19:27   #20
bobbytre
Senior Member
 
L'Avatar di bobbytre
 
Iscritto dal: Feb 2010
Messaggi: 466
io ti posso consigliare cosi:
Codice PHP:
...
printf("%22lld x 100-nanosecond = %lld MILLISECONDI \n",diff.QuadPart ,diff.QuadPart/10000 ); 
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati.
bobbytre è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea Oltre il contante e le crypto: tutto sull'Euro D...
SpaceX ha lanciato il razzo spaziale Sta...
Anthropic lancia Claude Opus 5: eclissa ...
Batterie a terra per Varta, bancarotta v...
Elon Musk: l'intelligenza artificiale su...
Ryzen 7 9800HX3D: il miglior processore ...
Google porta Gemini Live sui vecchissimi...
Corsair Platform:4 in offerta: la scriva...
Il creatore di Disagea sull'addio dei gi...
Fastweb + Vodafone entra nello SmartCity...
AI Act europeo: dal 2 agosto partono i n...
Da 1,3 a 10 miliardi in due mesi: chi è ...
Schede video RTX: NVIDIA comunica nuovi ...
GTA 6, i 60 fps stabili potrebbero esser...
Questa Smart TV QLED da 40 pollici con H...
Ring in sconto fino al 57%: videocitofon...
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: 06:46.


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