|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
[C] - Thread
Nel linguaggio C, come si fà a mettere un Thread in attesa, in modo che non occupi la cpu per tot. tempo?
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
|
Se sei All'interno del thread basta che fai una chiamata di sistema per esempio una sleap!!
|
|
|
|
|
|
#3 | |
|
Junior Member
Iscritto dal: Mar 2007
Città: 127.0.0.1
Messaggi: 23
|
Quote:
system("sleep -s 0.003"); // per 3 millisecondi system("sleep 3"); // per 3 secondi visto che il flag di default è -s system("sleep -h 1"); // per 1 ora system("sleep -d 3"); //per 3 giorni Ciao ciao Daniel
__________________
Se hai un sogno, non metterlo mai al secondo posto nella lista delle cose da fare. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1451
|
perkè usare system e basarsi su un eseguibile esterno?
Credo sia meglio utilizzare direttamente sleep()
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
|
in quale os?
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita Milla |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
Come OS utilizzo linux;
ma una sleep, ferma il thread o il processo? |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
|
Quote:
In ogni caso il tuo thread sarà schedulato. Se non deve fare niente, istanzialo quando deve lavorare...
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita Milla |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
facendo la fork creo un nuovo processo, però i 2 processi che poi avrò non possono condividere gli stessi dati;
Per questo motivo utilizzo gli thread |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
|
Quote:
Così te lo togli dai piedi.
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita Milla |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Il thread.
__________________
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 |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Ad esempio non puoi sospendere un solo thread con SIGSTOP come sospenderesti un qualsiasi 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 Ultima modifica di ilsensine : 10-04-2007 alle 15:05. |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1451
|
Quote:
Impossibile risponderti se non posti almeno 2 righe di codice
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
Quote:
Codice:
void *thread_func(void *c) {
while (1) {
carica(c);
sleep(2);
}
pthread_exit(0);
}
|
|
|
|
|
|
|
#15 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
pthread_exit(0) lo puoi anche togliere...
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
si infatti..mah, come mai mi si blocca il programma?
carica come funzione serve per stampare una stringa in una textfield scritta con lazarus; infatti stò facendo i thread con C e interfaccia grafica con lazarus (pascal ad oggetti); dal sorgente C creo il file oggetto e poi eseguo il link..cosa potrebbe essere che non funziona? |
|
|
|
|
|
#17 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
così a sentimento il fatto che il programma si blocchi sembra legato più all'uso che fai di questo lazarus (che non conosco) che non al multithreading, perché poco ma sicuro, la sleep addormenta solo il thread. per verificarlo pova ad eseguire passo passo l'altro thread col debugger.
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1451
|
quanti thread lanci? non so cosa faccia carica() ma prova a toglierlo.
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
Quote:
Questo è il codice del sorgente C: Codice:
void newThread (int sc) {
switch (sc) {
case 1:
res1 = pthread_create(&IDT1, NULL, thread_func, "ciao 1");
break;
case 2:
res2 = pthread_create(&IDT2, NULL, aggiorna_SQL, NULL);
break;
}
}
void *thread_func(void *c) {
int i, pid;
i=0;
while (1) {
carica(c);
sleep(2);
}
pthread_exit(0);
}
Codice:
procedure carica(s: Pchar); cdecl; export;
var
p: string;
begin
p:=s;
form1.Memo1.Append(p);
end;
|
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Jul 2006
Messaggi: 1568
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:42.




















