Programm bleibt bei WaitForSingleObject hängen...
-
Äh.
Ich verwende niemals static Daten wenn es sich vermeiden lässt.
Ich programmiere schliesslich auch meistens "objektorientiert" (ein Unwort, weil es viel zu viele Meinungen darüber gibt wie OOP nun auszusehen hat, aber egal).Wenn ich ein Objekt habe welches einen eigenen Thread rausstartet, dann stehen die gemeinsam genutzten Daten natürlich als non-static Member in diesem Objekt. Der Thread bekommt einen Zeiger auf das Objekt mit, fertig.
Daten die bloss der Thread alleine braucht lege ich entweder im Thread mit new an (wenns gross ist), oder sie wandern einfach auf dessen Stack, wofür hat man den schliesslich.Wenn ein Thread detached läuft dann bekommt er meistens einen Zeiger auf die Daten die er braucht mit, wobei ich dann die Ownership an den Thread übergebe, d.h. der muss sich darum kümmern das "Datenobjekt" mittels delete wieder wegzumachen.
Und was das Zugriffe Synchronisieren angeht: du musst Zugriffe auf sämtliche Daten synchronisieren die von mehreren Threads verwendet werden. Einzige Ausnahme: wenn *ALLE* Threads nur lesend darauf zugreifen. Also z.B. Lookup-Tabellen die du einmal mit Werten befüllst (bevor du andere Threads rausstartest), und danach NURMEHR liest. Sobald aber irgendwer schreibt musst du synchronisieren.
Daten die ausschliesslich ein Thread verwendet sind natürlich nicht betroffen, wobei natürlich auch egal ist wenn das nicht der "Hauptthread" ist.