RISOLTO Qualcuno bravo con i thread su C++ ?

Stato
Discussione chiusa ad ulteriori risposte.

m3tt0

Nuovo Utente
73
11
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
Ho questa istruzione

Codice:
printf("Entro nel thread con n=%d\n", n);

all’interno di questo piccolo programma,

Codice:
#include <pthread.h>
#include <iostream>

void* test(void* p)
{
int n = *(int*)p;
printf("Entro nel thread con n=%d\n", n);
for(int i=0; i<n; i++)
   printf("Numero: %d\n", i);
  printf("Esco dal thread\n");
pthread_exit(NULL);
return NULL;
}

int main()
{
  pthread_t id[5];
for(int i=0; i< 20; i++)
{
   pthread_create(&id[i], NULL, test, (void*)&i);
}

printf("Hello World!\n");
pthread_exit(NULL);
return 0;
}

qualcuno potrebbe farmi capire cosa c’è di sbagliato e cosa sta a significare quel “n=%d” .
Grazie in anticipo
 
Ultima modifica:

pabloski

Utente Èlite
2,762
825
Da dove l'hai preso quel codice? Ci sono errori molto basilari e grossolani.

Definisci l'array id di 5 elementi e poi pretendi di metterci dentro 20 thread id. Inoltre fai riferimento a &id che ovviamente punta all'emento id[0], per cui non vai nemmeno a salvarti tutti i 20 id dei thread creati nel for.

Usi cout, ma tutto il resto è C. Quindi non ho capito se dovrebbe essere un programma C o C++. Anche se lì C++ proprio non serve.

Ci sono due include in testa, ma non è specificato cosa dovrebbe includere. Quelle due righe già danno errore in fase di compilazione.

Nel printf che chiedi, %n è la format string della printf e specifica un intero. E infatti, sempre nel printf, poi viene specificata la variabile n per la sostituzione.

Il successivo for non ho capito che cosa dovrebbe essere. E' completamente sbagliata la sintassi.
 

m3tt0

Nuovo Utente
73
11
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
Da dove l'hai preso quel codice? Ci sono errori molto basilari e grossolani.

Definisci l'array id di 5 elementi e poi pretendi di metterci dentro 20 thread id. Inoltre fai riferimento a &id che ovviamente punta all'emento id[0], per cui non vai nemmeno a salvarti tutti i 20 id dei thread creati nel for.

Usi cout, ma tutto il resto è C. Quindi non ho capito se dovrebbe essere un programma C o C++. Anche se lì C++ proprio non serve.

Ci sono due include in testa, ma non è specificato cosa dovrebbe includere. Quelle due righe già danno errore in fase di compilazione.

Nel printf che chiedi, %n è la format string della printf e specifica un intero. E infatti, sempre nel printf, poi viene specificata la variabile n per la sostituzione.

Il successivo for non ho capito che cosa dovrebbe essere. E' completamente sbagliata la sintassi.

Ti ringrazio infinitamente, se lo ritieni possibile vorrei chiederti in privato qualche altra informazione, il codice mi è stato assegnato dal mio professore.

Il codice comunque dovrebbe essere C++.

Comunque non avevo notato che i due include sono spariti, sono la libreria pthread.h e iostream.
Ho comunque notato che è tutto scritto in C, ma il professore ha richiesto in C++, si sarà sbagliato. Per quanto riguarda invece quel printf n=%d, ancora non ho capito a cosa serve.


Inviato dal mio iPhone utilizzando Toms Hardware Italia Forum
 

Mursey

Super Moderatore
Staff Forum
Utente Èlite
6,662
4,186
i due include sono spariti
Il codice va scritto usando i tag CODE, infatti se noti ad un certo punto interpreta [i] come il comando per scrivere in corsivo.
Inserisci il tag e correggi il codice perso per cortesia.
Grazie
 

m3tt0

Nuovo Utente
73
11
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
Il codice va scritto usando i tag CODE, infatti se noti ad un certo punto interpreta [i] come il comando per scrivere in corsivo.
Inserisci il tag e correggi il codice perso per cortesia.
Grazie

ma come scrivo usando i tag che sono da telefono?
 

Andretti60

Utente Èlite
5,188
3,780

Allegati

  • 3A00D175-0ED0-4FCC-B950-DD681FD259BD.png
    3A00D175-0ED0-4FCC-B950-DD681FD259BD.png
    207.5 KB · Visualizzazioni: 82
  • Mi piace
Reazioni: Mursey

m3tt0

Nuovo Utente
73
11
CPU
i5-9400F
Dissipatore
NZXT Kraken M22 120mm
Scheda Madre
ASRock H310CM-HDV
HDD
WDC 1TB & SSD 480GB
RAM
G.Skill F4-2400C17-8GIS DDR4
GPU
NVIDIA GeForce GTX 1660 Super
PSU
Cooler Master MWE 600W
Case
Antec NX210
Net
Fibra/Rame 100 mega
Non capisco il legame ma basta anche scrivere [CODE][/CODE]
Essendo dall'applicazione non sapevo come inserire il testo come codice, chiedo scusa. Ho risolto e modificato il tutto.
 
  • Mi piace
Reazioni: Mursey
U

Utente cancellato 371741

Ospite
Riguardo i thread, lasciali sempre uscire in maniera naturale (return 0;). Non usare mai pthread_exit
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando

Discussioni Simili