2

Linux C++ で posix スレッドを実装する方法.「.c」として保存され、c コンパイラを使用して実行される smme プログラムは問題ありませんが、c++ ではエラーが発生します..

コンパイル時に間違ったと思いますが、C++ の「-lpthread」のように含めるタグはありますか

誰かが有効なコードを送ってくれませんか...?

実際、これは私のコードです

int cooperbussman :: startlistenthread()
{
        if(pthread_create(&m_thread,0,&packetreadertask,0)<0)
        {
                cout<<"Unable to create the thread Startlistenthread\n";
                return -1;
        }
        return 1;

そして、私が得ているエラーは

cooperbussman.cpp: メンバー関数 âint cooperbussman::startlistenthread() 内:
cooperbussman.cpp:76: エラー: âvoid* (*)()â から âvoid* (*)(void*)â への変換が無効です
cooperbussman.cpp:76: エラー: 「int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)」の引数 3 を初期化しています
4

3 に答える 3

5

Your packetreadertask function must be a function that takes a single void * as a parameter. This is the important error message:

cooperbussman.cpp:76: error: invalid conversion from âvoid* (*)()â to âvoid* (*)(void*)â

Your function is declared something like this:

void *packetreadertask();

where it must be:

void *packetreadertask(void *);
于 2009-02-24T03:50:07.693 に答える
4

Boost.Threads の使用を検討することもできます。それをサポートするプラットフォーム上の pthreads を介して、C++ でいくつかの単純なセマンティクスを提供します。

しかし....C++ プログラムで pthread を使用できない理由はありません。エラーはシンボル マングリングが原因である可能性がありますが、コードまたは少なくともコンパイラの出力を確認せずに、より正確にサポートする方法はありません。

于 2009-02-24T03:34:36.683 に答える
2

gcc の場合と同様に、g++ を使用する場合は -lpthreads を使用します。非静的メンバー関数ポインターをスレッドとして使用しようとしていない限り、pthreads は C++ で問題なく動作するはずです。

于 2009-02-24T03:37:34.320 に答える