2017-03-14 8 views
0

IのCreateThreadによって呼び出される次の関数があります。関数ポインタをlpParameterとしてCreateThreadに渡す方法は?

DWORD WINAPI start_thread(LPVOID handleFunction) 
{ 
    int prio = 4; 

    // call handleFunction() 
    handleFunction(prio); 

    return TRUE; 
} 

をそして私はここにスレッドを作成:

DECL_PREFIX tid_t so_fork(so_handler *handleFunction, unsigned priority) { 

    DWORD dw; 


    hThr[currentThread] = CreateThread(
     NULL,          // default security attributes 
     0,           // use default stack size 
     (LPTHREAD_START_ROUTINE)start_thread,  // thread function name 
     (LPVOID)&handleFunction,      // argument to thread function 
     0,           // use default creation flags 
     &dw);   // returns the thread identifier 

    return 0; 
} 

私はbuilindそれをしていたとき、私は次のエラーを取得する:

Error C2064 term does not evaluate to a function taking 1 arguments libscheduler  

expression preceding parentheses of apparent call must have (pointer-to-) function type libscheduler 

私はそれを間違っていますか?あなたはそれを指していることをso_handlerのアドレス、handleFunction変数自体のローカルアドレスを渡していないされているのでCreateThread()&handleFunctionを渡す

+0

可能な重複[Windowsのスレッド:\ _beginthread対\ _beginthreadex対のCreateThread C++](http://stackoverflow.com/questions/331536/windows-threading-beginthread-vs-beginthreadex-vs-createthread-c) –

+0

「私は何をしているのですか?おそらくC++でやりたくない 'CreateThread()'を使っています。 –

+0

私はWindowsのCreateThreadを使用しています –

答えて

1

は、間違っています。 handleFunction以来

が既にポインタである、より多くのこの代わりのようなものを試してください:

DWORD WINAPI start_thread(LPVOID handleFunction) 
{ 
    int prio = 4; 

    // call handleFunction() 
    so_handler *handler = (so_handler *) handleFunction; 
    handler(prio); // or maybe (*handler)(prio), depending on how so_handler is actually defined... 

    return TRUE; 
} 

DECL_PREFIX tid_t so_fork(so_handler *handleFunction, unsigned priority) { 

    DWORD dw; 

    hThr[currentThread] = CreateThread(
     NULL,     // default security attributes 
     0,      // use default stack size 
     &start_thread,   // thread function name 
     handleFunction,   // argument to thread function 
     0,      // use default creation flags 
     &dw);     // returns the thread identifier 

    return 0; 
} 
+0

OP *は本当に 'CreateThread()'を使いたくないのですが、コンパイルエラーを表示すると –

関連する問題