1

ブーストスレッドを動作させるために持っていたいくつかのデータをコピーして、以下のコードを実装しました。エラー C:\dev\default threads_threads.cpp|18|error: invalid conversion from 'void ( )(void )' to 'unsigned int ( attribute (( stdcall )) )(void )' [-fpermissive]| が表示されます。

しかし...コメントされた行は推奨されたものであり、コメントは私が得たエラーを説明しています。

_beginThreadEx が強く推奨されていることがわかりましたが、Web 上では (チュートリアルのように) 十分に文書化されていません。

#include <iostream>
#include <process.h>

void myThread(void *data)
{
    //C:\dev\default threads\_threads.cpp|6|error: invalid conversion from 'int*' to 'int' [-fpermissive]|
    //int x = static_cast<int*>(data);

    int *x = (int*)data;

    std::cout << "Hellow World! " << x;
}

int main()
{

    int x = 10;
    _beginthreadex(NULL, 0, myThread, &x, 0, NULL);
    while(true);
}
4

1 に答える 1

1

とにかく x をポインターとして宣言する必要があります。

int *x = static_cast<int*>(data);

両方とも_beginthreadここ_beginthreadexに文書化されています: http://msdn.microsoft.com/en-us/library/kdzttdcb(v=vs.80).aspx

_beginthreadex() の宣言によると、 myThread() 関数は次のように宣言する必要があります。

unsigned __stdcall myThread(void *data);
于 2012-10-17T00:45:23.943 に答える