Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Thread? Wie geht’s?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.11.2004, 19:42 Uhr
~Anfänger12345
Gast


Hallo!

Ich will in einem WinApi Programm Netzwerk – Kommunikationen von einem Thread verarbeiten lassen. Hab aber noch nie mit einem Thread gearbeitet.
Nun gut nach Stunden in der MSDN habe ich jetzt einen qualmenden Kopf, und ein paar Fragen:

1) Ich erstelle eine neue Funktion z.B.:
UINT Thread_Main(void* p);
Diese übergebe ich an die _beginthread(Thread_Main, 0, &Para);
Jetzt ist der Thread doch gestartet. Mein Programm läuft hinter dem _beginthread() weiter,
zusätzlich läuft der thread, als wehre die Thread_Main() , die int main() eines „Normalen“ Progs. Oder?

2) Ich habe was von Stapel Speicher , Kopie der CPU-Register u.s.w. gelesen, was muss ich hier beachten?

3)Wie geht’s weiter?
Ich habe an zwei Pointer gedacht und an dazugehörende Speicher Felder.
Einen Lese pointer für das Haupt Prog und einen Schreib Pointer für den Thread.
Der Thread Schreibt seine Daten in den Speicher auf den der Schreib Pointer Zeigt und vertauscht dann die beiden Pointer, so das das Haupt Prog die Daten bei bedarf aus dem Lese Speicher lesen kann.

Danke im voraus

Mfg Anfänger
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.11.2004, 20:01 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
1. Korrekt
2. Jeder Thread bekommt seinen eigenen Stack.
Was die CPU Register angeht;wird einem anderen Thread Rechenzeit zugeteilt wird der
Zustand der Register(Stackpointer etc.) gespeichert um bei erneuter Rechenzeitzuteilung an der alten Stelle weitermachen zu können.Hier musst du weiter nichts beachten.Das fällt in den Bereich des Betriebssystems...
3.Wenn du von beiden Threads auf die gleiche Resource(in diesem Fall Speicher hinter deinem Pointer) zugreifen willst musst du diese Resource,bei jedem Zugriff, unbedingt synchronisieren.In deinem Fall z.B. mit einer Critical Section.Sonst erhälst du inkonsistente Datenzustände falls dein Thread z.B. mitten in einer Datenänderung unterbrochen wird.
Beachte dass selbst vermeintlich elementare Operationen wie z.B. i++ nicht atomar sind,also vom Betriebssytem "mittendrin" unterbrochen werden könnten....

Ach ja,anstelle von _beginthread solltest du _beginthreadex nutzen.Macht das gleiche aber ist sicherer.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.11.2004, 20:44 Uhr
~Anfänger12345
Gast


Vielen Dank Spacelord!


Hab noch mal in die MSDN wegen der CCriticalSection gesehen, scheint ja nicht so schwer zu sein.

Werde es Morgen mal Testen. Komme heute Leider nicht mehr dazu.

Mfg Anfänger
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: