web-dev-qa-db-ja.com

シンプルなpthread! C ++

なぜこれが機能しないのか分かりません

#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;
}

エラー:

[説明、リソース、パス、場所、タイプ] 'int pthread_create(pthread_t *、const pthread_attr_t *、void *(*)(void *)、void *)'の引数3を初期化するthreading.cpp threading/src line 24 C/C++の問題

21
Angel.King.47

スレッドmainを次のように宣言する必要があります。

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

メインスレッドが終了するため。

メインスレッドでスリープ状態にします。

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

return 0;

POSIX標準では、メインスレッドの終了時に何が起こるかは規定されていません。
しかし、ほとんどの実装では、これによりすべての生成されたスレッドが死にます。

そのため、メインスレッドでは、スレッドが終了するのを待ってから終了する必要があります。この場合、最も簡単な解決策は、スリープ状態にして、他のスレッドに実行の機会を与えることです。実際のコードでは、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

Pthread関数プロトタイプから:

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

Pthread_createに渡される関数には、次のプロトタイプが必要です。

void* name(void *arg)
2
Falaina

これは私のために働いた:

#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

リンケージ。これを試して:

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