Problem mit globalen Variabeln

cwriter

Erfahrenes Mitglied
Hallo Welt

Wie der Titel schon sagt, habe ich ein Problem mit globalen Variabeln:

C:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>

char string[16];

DWORD WINAPI Thread()
{
   _sleep(100);     
   printf("%s",string);
}


int main()
{
    CreateThread(NULL, 0, Thread, NULL, 0, NULL); 
    string={'t','e','s','t','\0'}
}

Wie ihr euch wahrscheinlich denken könnt, ist die Rückgabe nicht "test". Könnt ihr mir vielleicht sagen, wie ich den Inhalt in die globale Variable einlesen kann? Danke vielmals!

cwriter
PS.: Ich schreibe in c und benutze Dev-C++.
 
Hi.

Mal abgesehen davon, dass der Code überhaupt nicht kompiliert muss man bei Multi-Threading besondere Vorsichtsmaßnahmen treffen wenn auf Variablen aus verschiedenen Threads zugegriffen wird (Stichwort: Mutex :google:).

Gruß
 
@Adrian_Broher
Aber ich habe dem System doch 100 ms zur Verfügung gestellt? Somit hätte der Computer doch genug Zeit, den Inhalt zu berechnen, oder etwa nicht?

@Deepthroat
Der Code muss nicht kompiliert werden? Was meinst du damit?
Ich habe deinen Wunsch zu Herzen genommen und hier gefunden:
http://www.tutorials.de/c-c/309943-mutex-handling.html
Aber entweder bin ich total blöd oder ich verstehe es sonst nicht:
Der Mutex ist einfach ein "Behälter" (wie struct, was ich auch nicht verstehe), der Variabeln in Threads abgleicht. <- Ist das so korrekt? Und wenn ja, könnte mir jemand den Code oben in ein Mutex-Beispiel umschreiben? Ich wäre demjenigen unendlich dankbar!

Gruss
cwriter
 
Aber ich habe dem System doch 100 ms zur Verfügung gestellt? Somit hätte der Computer doch genug Zeit, den Inhalt zu berechnen, oder etwa nicht?
Inzwischen ist allerdings dein Hauptprogramm schon längst beendet und die Ausgabe des Threads wird daher nicht mehr auf die Standardausgabe geschrieben.

Gruß
MCoder
 
Inzwischen ist allerdings dein Hauptprogramm schon längst beendet und die Ausgabe des Threads wird daher nicht mehr auf die Standardausgabe geschrieben.
Das heisst also, dass ein Thread nicht eigenständig operieren kann? Weshalb ist er dann in der Lage, selbst Texte in das Fenster zu schreiben?

Gruss
cwriter
 
Nach deinem Code ist der Mainthread schon längst vor dem printf() beendet.
Außerdem sei vorsichtig mit Querzugriff auf globalen Variablen in verschiedenen Threads. Die Zugriffe müssen synchronisiert werden.
 
Das heisst also, dass ein Thread nicht eigenständig operieren kann? Weshalb ist er dann in der Lage, selbst Texte in das Fenster zu schreiben?
Ein Thread hat einen gemeinsamen Kontext mit dem Prozess, der ihn startet. Dazu gehören u.a. die globalen Filedeskriptoren (stdout, stdin...). Ein Thread kann also schon unabhängig laufen, aber wenn die globalen Resourcen nicht mehr existieren, kann der Thread damit auch nicht mehr arbeiten.

Gruß
MCoder
 
Vielen Dank für die Aufklärung!
Da merke ich gerade, dass wir vom Thema abgewichen sind. Ist der Mutex nun ein "Behälter" für die Variabeln oder ist er ganz einfach ein Variabelntyp? Und wo soll ich ihn hineintun? In den Thread oder in das Hauptprogramm?

Gruss
cwriter
 
Zuletzt bearbeitet:
Zurück