Simple pthread! C++

前端 未结 6 1080
生来不讨喜
生来不讨喜 2021-02-07 02:25

I have no idea why this doesn\'t work

#include 
#include 
using namespace std;

void *print_message(){

    cout << \"Thre         


        
相关标签:
6条回答
  • 2021-02-07 03:03

    From the pthread function prototype:

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

    The function passed to pthread_create must have a prototype of

    void* name(void *arg)
    
    0 讨论(0)
  • 2021-02-07 03:10

    Because the main thread exits.

    Put a sleep in the main thread.

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

    The POSIX standard does not specify what happens when the main thread exits.
    But in most implementations this will cause all spawned threads to die.

    So in the main thread you should wait for the thread to die before you exit. In this case the simplest solution is just to sleep and give the other thread a chance to execute. In real code you would use 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;
    }
    
    0 讨论(0)
  • 2021-02-07 03:11

    This worked for me:

    #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;
    }
    
    0 讨论(0)
  • 2021-02-07 03:18

    When compiling with G++, remember to put the -lpthread flag :)

    0 讨论(0)
  • 2021-02-07 03:23

    Linkage. Try this:

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

    0 讨论(0)
  • 2021-02-07 03:26

    You should declare the thread main as:

    void* print_message(void*) // takes one parameter, unnamed if you aren't using it
    
    0 讨论(0)
提交回复
热议问题