2

マルチスレッドと関数にカプセル化されたすべてのものを使用して何かをしたかったのですfoo

filterThread = _beginthread (foo, 0,NULL) ;

fooそして私は戻り値をさせたかった:

int foo()
{
    return iRet;
}

しかし、_beginthreadのプロトタイプは、それがvoidでなければならないことを_CRTIMP uintptr_t __cdecl _beginthread (_In_ void (__cdecl * _StartAddress) (void *), _In_ unsigned _StackSize, _In_opt_ void * _ArgList)示しています。これは、値を返すことができないことを意味します。戻り値fooを許可するために他にできる方法はありますか?foo

4

2 に答える 2

2

代わりに使用してください_beginthreadex。これにより、値を返す関数を使用できます。GetExitCodeThreadその後、スレッドが完了したときに値を取得するために使用できます。

于 2011-09-19T03:19:36.953 に答える
1

スレッドの終了コードとして知られる戻り値を取得するには、次のようにします。

終了後、スレッドのハンドルでこの関数を呼び出します。

DWORD ExitCode;
GetExitCodeThread(hThread, &ExitCode);

例として、代わりに_beginthreadexを使用することを検討してください。

unsigned __stdcall foo( void* pArguments )
{
    _endthreadex( 0 );
    return 0;
} 

int main()
{ 
    HANDLE hThread;
    unsigned threadID;

    hThread = (HANDLE)_beginthreadex( NULL, 0, foo, NULL, 0, &threadID );

    WaitForSingleObject( hThread, INFINITE );

    CloseHandle( hThread );
}
于 2011-09-19T03:12:07.643 に答える