1

私は ansi と iso の世界の初心者です。プログラムを次のようにコンパイルしました。

-asni -pedantic -std=c++11 -std=c++98 

今、私は次の警告を受け取ります:

 warning: converting from 'void (NetworkSocket::*)()' to 'void* (*)(void*)' [-pedantic]

次の行の場合:

if (pthread_create(this->threadArray, NULL, (void*(*)(void*)) &NetworkSocket::threadProcedure  , (void *)this) != 0)
        { /* error */      }

どうすればペダンティックな警告を渡すことができますか?

4

1 に答える 1

2

pthread_create は、C 関数が void ポインターを取り、void ポインターを返すことを想定している C 関数です。したがって、 this ポインターをスレッド引数として使用すると、そのような C 関数を使用してメンバー関数への呼び出しをディスパッチできます。

extern "C" void* startThread( void* p )
{
    static_cast< NetworkSocket* >( p )->threadProcedure();

    return 0;
} 

if ( pthread_create( this->threadArray, 0, startThread, this ) )
   ...
于 2012-07-28T14:27:21.003 に答える