Ich habe fork() in C verwendet, um einen anderen Prozess zu starten. Wie starte ich einen neuen Thread?Wie starte ich Threads in Plain C?
Antwort
Da Sie fork() erwähnt haben, nehme ich an, dass Sie auf einem Unix-ähnlichen System sind, in welchem Fall POSIX threads (normalerweise als Pthreads bezeichnet) das sind, was Sie verwenden möchten.
Insbesondere ist pthread_create() die Funktion, die Sie benötigen, um einen neuen Thread zu erstellen. Seine Argumente sind:
int pthread_create(pthread_t * thread, pthread_attr_t * attr, void *
(*start_routine)(void *), void * arg);
Das erste Argument ist der zurückgegebene Zeiger auf die Thread-ID. Das zweite Argument sind die Thread-Argumente, die NULL sein können, es sei denn, Sie möchten den Thread mit einer bestimmten Priorität starten. Das dritte Argument ist die Funktion, die vom Thread ausgeführt wird. Das vierte Argument ist das einzelne Argument, das an die Thread-Funktion übergeben wird, wenn es ausgeführt wird.
Hier ist ein Beispiel, wie man es benutzt: http://timmurphy.org/2010/05/04/pthreads-in-ca-minimal-working-example/ – tremendows
Werden POSIX-Threads jetzt nicht als "plain C" gezählt, dass die C11 Standard definiert sie? – Hydronium
Während die C11-Multithreading-API _heavily_ von POSIX-Threads beeinflusst wird, sind sie nicht identisch. Es scheint mir also nicht richtig zu sagen, dass POSIX-Threads "plain C" sind. –
prüfen schauen.
AFAIK, ANSI C definiert kein Threading, aber es sind verschiedene Bibliotheken verfügbar.
Wenn Sie unter Windows laufen, verlinken Sie zu msvcrt und verwenden Sie _beginthread oder _beginthreadex.
Wenn Sie auf anderen Plattformen laufen, sehen Sie sich die Pthreads-Bibliothek (ich bin sicher, es gibt auch andere).
Threads sind nicht Teil des C-Standards. Die einzige Möglichkeit, Threads zu verwenden, besteht in der Verwendung einiger Bibliotheken (zB: POSIX-Threads in Unix/Linux, _beginthread/_beginthreadex, wenn Sie die C-Runtime von diesem Thread verwenden wollen) oder nur CreateThread Win32 API)
- 1. C++ implementiert in Plain C
- 2. Wie starte ich eine Anwendung in C#?
- 3. Clion. Wie starte ich ein C-Projekt?
- 4. Wie starte ich QGIS?
- 5. Wie starte ich BouncyCastle?
- 6. N2Cms Wie starte ich
- 7. Wie starte ich Eclipse in JDK?
- 8. Wie starte ich einen UI-Thread in C#
- 9. Wie starte ich das Debugging?
- 10. Wie starte ich in der Windows-Entwicklung?
- 11. Wie starte ich mit MapKit in iPhone
- 12. Wie starte ich eine VM in azurblau?
- 13. Threads in C++ Builder
- 14. Hintergrund Threads in C#
- 15. Wie starte ich Matlab Profiler
- 16. Wie starte ich eine QApplication?
- 17. Wie starte ich Snort Software?
- 18. Wie oft starte ich autoconf?
- 19. Wie starte ich mercurial-Abfragen von C++ (plattformübergreifend)?
- 20. Wie starte ich Blackberry Programmierung?
- 21. Wie starte ich einen Thread?
- 22. Wie starte ich mit andengine?
- 23. Wie starte ich MySQL Befehle?
- 24. Wie kann ich Threads in C# abbrechen, anhalten und fortsetzen?
- 25. Wie kann ich die Zeit eines Threads in C# messen?
- 26. Wie sperre ich die Konsole über Threads in C# .NET?
- 27. Wie mache ich vier Threads in einer Klasse C++
- 28. Wie starte ich einen C++ - Thread beim Programmstart?
- 29. Wie starte ich Sidekiq in RubyMine?
- 30. Wie starte ich MongoDB in Anaconda?
Es hängt von der Plattform ab. So funktioniert es unter Windows: [http://msdn.microsoft.com/en-us/library/ms682453.aspx](http://msdn.microsoft.com/en-us/library/ms682453.aspx) –
Wie in der CreateThread-Dokumentation, mit der Sie verbunden sind, erläutert wurde, sollte, wenn das Programm die C-Laufzeitbibliothek verwendet, _beginthreadex verwendet werden, nicht CreateThread. – ChrisN
Danke, das habe ich nicht bemerkt. Woher weißt du, ob du den CRT verwendest? Ich dachte, alles würde es benutzen. –