web-dev-qa-db-fra.com

Pthread simple! C ++

Je ne sais pas pourquoi ça ne marche pas

#include <iostream>
#include <pthread.h>
using namespace std;

void *print_message(){

    cout << "Threading\n";
}



int main() {

    pthread_t t1;

    pthread_create(&t1, NULL, &print_message, NULL);
    cout << "Hello";

    return 0;
}

L'erreur:

[Description, Ressource, Chemin, Emplacement, Type] initialisant l'argument 3 de 'int pthread_create (pthread_t *, const pthread_attr_t *, void * (*) (void *), void *)' threading.cpp threading/src ligne 24 C/Problème C++

21
Angel.King.47

Vous devez déclarer le thread principal comme:

void* print_message(void*) // takes one parameter, unnamed if you aren't using it
36
Sam Harwell

Parce que le thread principal se termine.

Mettez un sommeil dans le fil principal.

cout << "Hello";
sleep(1);

return 0;

La norme POSIX ne spécifie pas ce qui se passe lorsque le thread principal se ferme.
Mais dans la plupart des implémentations, cela entraînera la mort de tous les threads générés.

Donc, dans le thread principal, vous devez attendre que le thread meure avant de quitter. Dans ce cas, la solution la plus simple consiste simplement à dormir et à laisser l'autre thread s'exécuter. Dans le code réel, vous utiliseriez pthread_join ();

#include <iostream>
#include <pthread.h>
using namespace std;

#if defined(__cplusplus)
extern "C"
#endif
void *print_message(void*)
{
    cout << "Threading\n";
}



int main() 
{
    pthread_t t1;

    pthread_create(&t1, NULL, &print_message, NULL);
    cout << "Hello";

    void* result;
    pthread_join(t1,&result);

    return 0;
}
18
Martin York

À partir du prototype de la fonction pthread:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
    void *(*start_routine)(void*), void *arg);

La fonction passée à pthread_create doit avoir un prototype de

void* name(void *arg)
2
Falaina

Cela a fonctionné pour moi:

#include <iostream>
#include <pthread.h>
using namespace std;

void* print_message(void*) {

    cout << "Threading\n";
}

int main() {

    pthread_t t1;

    pthread_create(&t1, NULL, &print_message, NULL);
    cout << "Hello";

    // Optional.
    void* result;
    pthread_join(t1,&result);
    // :~

    return 0;
}
2
Vijay Mathew

Lors de la compilation avec G ++, n'oubliez pas de mettre l'indicateur -lpthread :)

0
cwap

Lien. Essaye ça:

extern "C" void *print_message() {...