2009-12-30 9 views

Antwort

27

Hier ist die MSDN sample zur Verwendung von CreateThread() unter Windows.

Die Grundidee ist, dass Sie CreateThread() aufrufen und es einen Zeiger auf Ihre Thread-Funktion übergeben, die auf dem Zielthread ausgeführt wird, sobald es erstellt wird.

Die einfachste Code, es zu tun ist:

#include <windows.h> 

DWORD WINAPI ThreadFunc(void* data) { 
    // Do stuff. This will be the first function called on the new thread. 
    // When this function returns, the thread goes away. See MSDN for more details. 
    return 0; 
} 

int main() { 
    HANDLE thread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL); 
    if (thread) { 
    // Optionally do stuff, such as wait on the thread. 
    } 
} 

Sie haben auch die Möglichkeit, SHCreateThread() -SAMe Grundidee nennen, aber einige Shell-Typ Initialisierung für Sie tun, wenn Sie danach fragen, wie die Initialisierung COM usw.

+3

Beachten Sie jedoch, dass Sie sehr vorsichtig sein müssen, wenn Sie den CRT im neuen Thread verwenden möchten. In MSVC sollten Sie zum Beispiel _beginthread/_beginthreadex und _endthread anstelle der relativen APIs verwenden, damit die CRT die internen pro-Thread-Strukturen korrekt zuordnen/freigeben kann. Ich denke, dass es auch in anderen CRTs irgendwie so gehen sollte. –

+0

Zusätzlich können Sie SHCreateThread() verwenden, wenn Sie möchten, dass COM unter anderem für Sie auf dem neuen Thread initialisiert wird. –

+0

Dies scheint ein C++ - Beispiel (Link) zu sein. Würde das auch für C funktionieren? – Jiminion

1

Atomare Operationen und Mutexe sind gut. Ich benutze CreateThread etc, nicht pthreads.

+0

Sind Pthreads verfügbar? unter Windows und/oder Visual Studio? – Jiminion

+0

keine Pthreads sind nicht direkt verfügbar. unter Windows und/oder Visual Studio. Sie können Mingw und Cygwin jedoch verwenden. –