Wie erstellt man Threads
-
Das Problem ist, dass Petzold sehr viel kostet. Gibt es da nicht eine kostenlose Alternative?
Mfg Ominion
-
Ach den kann man schon neu für 20 Euro kaufen bei Amazon. Einen Artikel, auch noch einen guten, zu diesem Thema kenne ich leider nicht!
-
Schade. Ich bin gerade nur sehr sehr knapp bei Kasse, deshalb habe ich nach einer kostenlosen Version gefragt. Kann mir aber vielleicht jemand die nötigsten Funktionen sagen und (muss nicht unbedingt sein) was sie bewirken?
Mfg Ominion
-
Threads dienen dazu, Aufgaben in einem Programm gleichzeitig oder scheinbar gleichzeitig durchzuführen.
Damit kannst du beispielsweise in deinem Programm in einem Thread Daten über eine Netzwerkverbindung austauschen und in einem anderen Thread weihterhin die Windows Nachrichtenschleife abarbeiten. Würdest du dies beides in einem Thread machen, würde das Programm nicht auf Windows Nachrichten reagieren können, wenn es gerade Daten schickt oder empfängt. Für den User würde es dann so wirken, als sei das Programm abgestürzt, weil die Oberfläche nicht mehr auf seine Eingaben reagiert.
-
Danke sehr, fsdfds.
Womit kann ich Threads initializieren und was muss ich der Funktion für Parameter übergeben?Mfg Ominion
-
Hallo,
nur als Anregung:
DWORD myThreadId = 0; SECURITY_ATTRIBUTES threadSecurityAttributes; threadSecurityAttributes.bInheritHandle = true; threadSecurityAttributes.lpSecurityDescriptor = NULL; threadSecurityAttributes.nLength = sizeof( threadSecurityAttributes) ; HANDLE hThread = CreateThread( &threadSecurityAttributes, 0, myThread, NULL, 0, &myThreadId );
wobei myThread eine Funktion der Form
DWORD WINAPI myThread( LPVOID lpParameter )
ist.
-
Danke Cosmixx, hat funktioniert.
Mfg Ominion
-
Du solltest neue threads mit _beginthread (oder _beginthreadex) erstellen. Der erste Parameter ist dabei ein Pointer auf die Startroutine des Threads, welche ausgeführt werden soll. Für die anderen 2 Parameter kannst du 0 übergeben.
Was sich genau hinter den einzelnen Parameter verbirgt kannst du hier nachlesen:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt__beginthread.2c_._beginthreadex.asp
-
Gibt es dafür einen technischen bzw. sicherheitstechnischen Hintergrund?
Mfg Ominion
PS: Trotzdem danke.
-
Mit _beginThread kann mehr als ein Parameter an den Thread übergeben werden und die Funktion unterstützt C-Runtime-Bibliotheken. Aber nur bei CreateThread kann man SecurityAttributes angeben.
-
"A thread that uses functions from the C run-time libraries should use the beginthread and endthread C run-time functions for thread management rather than CreateThread and ExitThread. Failure to do so results in small memory leaks when ExitThread is called." (MSDN)
-
@ Cosmixx: Danke jetzt weiß ichs
@ mgs_: Hab ich mir auch angeguckt, bin daraus aber nicht schlau gewordenMfg Ominion
-
mgs_ schrieb:
"A thread that uses functions from the C run-time libraries should use the beginthread and endthread C run-time functions for thread management rather than CreateThread and ExitThread. Failure to do so results in small memory leaks when ExitThread is called." (MSDN)
Prinzipiell kann man Threads erzeugen wie man will. Empfohlen wird natürlich dies via _beginthread(ex) zu tun. Wenn man es via CreateThread macht, muss man nur beachten, dass man nicht mit "return" den Thread beendet sondern mit "_endthread(ex)", dann gibt es keine Probleme...
Nur zur Info: Es gibt noch ganz andere Probleme bzgl. der CRT-Thread-Dingen:
http://blog.kalmbachnet.de/?postid=72