22

これが機能しない理由がわかりません

#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 24 行目 C/ C++ の問題

4

6 に答える 6

19

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

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

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;
}
于 2009-07-16T07:37:47.400 に答える
3

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

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

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

void* name(void *arg)
于 2009-07-16T07:46:31.643 に答える
0

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

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

于 2009-07-16T07:45:40.457 に答える