8 Stimmen

Wie man Threads in VC++ erstellt

  • Ich neige dazu, die POSIX-Threads bei der Programmierung in C, unter Linux .

  • Ohne MFC

Frage:

Wie würde ich dann Threads in VC++ erstellen?

Weitere Informationen zu Threads unter Win32?

Bearbeiten:

  • Kurze Illustrationen

Ich LIEBE stackoverflow - die beste Ressource für Studenten!

Mit freundlichen Grüßen

10voto

galets Punkte 16843

Wenn Sie nach einer plattformunabhängigen Methode suchen, verwenden Sie erhöhen

gibt es auch die Funktionen beginthread() und beginthreadex(). Beide scheinen eine Ergänzung zur Win32-API zu sein, in dem Sinne, dass man in vielen Anwendungsfällen immer noch einige Win32-Funktionen aufrufen muss (wie CloseHandle für beginthreadex). Wenn Sie sich also nicht so sehr um die Plattformkompatibilität kümmern, können Sie sich das Vorspiel sparen und CreateThread() verwenden.

Die Behandlung von Win32-Threads ist hier dokumentiert: http://msdn.microsoft.com/en-us/library/ms684852(VS.85).aspx

[edit1] Beispiel:

DWORD WINAPI MyThreadProc( void* pContext )
{
    return 0;
}

HANDLE h = CreateThread( NULL, 0, MyThreadProc, this, 0L, NULL );
WaitForSingleObject(h, TIME); // wait for thread to exit, TIME is a DWORD in milliseconds

[edit2] CRT & CreateThread():

gemäß MSDN:

Ein Thread in einer ausführbaren Datei, der die C-Laufzeitbibliothek (CRT) aufruft, sollte die Funktionen _beginthreadex und _endthreadex für die Thread-Verwaltung verwenden und nicht CreateThread und ExitThread; dies erfordert die Verwendung der Multithreading-Version der CRT. Wenn ein mit CreateThread erstellter Thread den CRT aufruft, kann der CRT den Prozess beenden, wenn der Speicherplatz knapp wird.

0 Stimmen

Nein, lassen Sie das Vorspiel nicht ausfallen. CreateThread() verträgt sich nicht mit der C-Laufzeit.

0 Stimmen

CreateThread() ist in Ordnung - ich bin nicht auf der Suche nach plattformunabhängigen Funktionen

0 Stimmen

Entschuldigung, ich habe mich nicht klar ausgedrückt. Siehe diese Frage stackoverflow.com/questions/331536/

3voto

Michael Burr Punkte 320591

Sie sollten nicht die rohe Win32 CreateThread() API.

Verwenden Sie die C-Laufzeitfunktion _beginthreadex() damit die Laufzeitumgebung die Möglichkeit hat, ihre eigene Thread-Unterstützung einzurichten.

3voto

Hans Passant Punkte 894572

Sie können entweder die CRT-Funktion _beginthreadex() oder die Windows-API-Funktion CreateThread() verwenden. _beginthreadex() ist für frühe Versionen von VC++ erforderlich, die über einen CRT verfügten, der den thread-lokalen Speicher noch nicht initialisieren konnte. CreateThread() ist zumindest in VS2005 und höher in Ordnung.

0 Stimmen

Interessant. Könnten Sie die faule Initialisierung von TLS näher erläutern und warum CreateThread jetzt OK ist? Ich habe immer _beginthreadex verwendet, weil ich dachte, dass dies für eine korrekte CRT-Initialisierung notwendig sei.

0 Stimmen

Es ist ein toter Faden. Warum fängst du nicht einen neuen an, z.B. "Ist _beginthreadex() noch notwendig?"

2voto

Andy Punkte 29060

Wahrscheinlich möchten Sie einen Blick auf die CreateThread() Funktion.

0 Stimmen

Nein, Sie wollen eigentlich _beginthread() oder _beginthreadex() verwenden. Siehe diese Frage für den Grund: stackoverflow.com/questions/331536/

1voto

Einige gute Bücher zu diesem Thema sind Petzold's Programmierung von Fenstern und Richter's Programmierung von Anwendungen für Windows. Insbesondere letzteres geht sehr ausführlich auf die serverseitige Programmierung wie Thread- und Synchronisations-APIs ein.

EDIT : Für Codeschnipsel ist Google Ihr Freund. Zum Beispiel Dieser Artikel hat einige minimale Beispiele für Gewinde.

0 Stimmen

T@NXC: Danke! Ich werde die Frage editieren. Ich war auch auf der Suche nach einer kurzen Illustration der einfachen Thread-Erstellung aus main()

0 Stimmen

Google ist Ihr Freund. Zum Beispiel codeproject.com/KB/threads/crtmultithreading.aspx enthält einige minimale Beispiele für die Erstellung von Threads.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X