?
also im prinzip ist ein thread eine funktion, die gleichzeitig (bzw. abwechselnd) mit der mainfunktion ausgeführt wird und auf die selben globalen variablen sowie auf den übergebenen parameter (bei mehreren variablen bietet sich hier eine struktur oder klasse an) vollständig zugreifen kann. du kannst von dort aus auch weitere threads starten.
Cherup schrieb:
So wie ich die Threads bis jetzt verstehe ist es nicht möglich vereinfacht gesagt einen Thread zu erstellen, die Klassen in diesem Thread zu instanzieren und irgendwann am Programmende diesen Thread wieder zu beenden, das wäre dann mehr oder weniger ein eigener Prozess. Es ist nur möglich eine Funktion/Methode in einem neuen Thread zu starten, die dann wieder weitere Funktionen/Methoden aufruft, die dann in dem gleichen Thread laufen. Ist das soweit korrekt?
doch genau das kannst du. weil der übergebene parameter ein voidzeiger ist, kannst du wenn du willst sämtliche daten übergeben und spätestens nach ende des threads sind die daten wieder in der mainfunktion.
Was wäre in diesem Fall sinnvoller: Die Netzwerkschnittstelle in einen eigenen Prozess auslagern oder mit Threads arbeiten? Ich weiß, die Frage ist seeehr unscharf und situationsabhängig Threads sind einfacher und sicherer, ein Prozess läuft komplett parallel. Wie sieht die übliche Implementierung aus wenn man viel Netzwerktraffic hat?
machs ruhig in einen thread. eine möglichkeit wäre, ein array mit datenlänge als parameter zu übergeben und diese datenlänge zu pollen.
Eine weitere Frage ist der Zugriff auf Membervariablen bei mehreren Threads. Angenommen ich habe eine Klasseninstanz, auf die mehrere Threads "gleichzeitig" zugreifen und Membervariablen verändern, im konkreten Fall eine Std-Queue. Dann muss ich doch mit einem Mutex den Zugriff auf die Queue regeln, damit keine race-condition auftritt, richtig?
das ist richtig. daten auf die mehrere threads schreibend zugreifen werden mit einem mutex (oder semaphor, oder, oder) geschützt.
Wie kann ich zwischen den Threads Daten austauschen? Irgendwann ist ein Thread an seinem Ende angelangt und es liegen Daten vor, die an die Serverlogik gehen sollen, die im eigentlich "Hauptthread" des Programms läuft. Wie kann ich da am sinnvollsten die Daten übergeben?
wie gesagt: du übergibst der funktion ("threadprozedur") einen zeiger.
du erinnerst dich doch noch an das beispiel "swap(int a,int b) vs. swap(int *a, int *b)"?
Man sieht, dass ich bei dem Thema noch sehr am Anfang stehe und noch viel grundlegendes nicht verstanden habe
also hast du noch ganz ordentlich was zu tun.