Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : _beginthread process.h



kurm_de
28-08-2005, 09:17
Hi,
ich hab hier aus dem Buch "C Programmieren von Anfang an" ein kleines Beispiel:



#include <process.h>
#include <stdio.h>
#include <time.h>

void stoppuhr( void *ch);

int weiter = 1, count = 0;

void mein() {
int zahl;
printf("\nBitte Zahl eingeben ");
_beginthread( stoppuhr,0,NULL);
scanf("%i",&zahl);
weiter=0;
printf("\nNach %i Sek. wurde %i eingegeben.",count, zahl);
}

void stoppuhr( void *dummy){
time_t start;
while (weiter)
{
time(&start);
printf("\b\b\b\b%3i:",count);
while(difftime(time(NULL),start)<1);
count++;
}
_endthread;
}



ich wollte jetzt wissen ob das auch unter Linux geht oder gibt es die process.h nur unter Windows?
weil ich hab die hier bei Suse 9.3 nicht gefunden.

Gruß kurm_de

SeeksTheMoon
28-08-2005, 10:36
Die Datei gehört zu Windows. Das Programm lässt sich aber auch so schreiben dass man den ganzen Windowskrempel nicht braucht.

[0x[90]|
28-08-2005, 15:29
Bevor nun wieder irgendjemand gleich daherkommt und PThreads vorschlaegt:
Unter Linux ist die benutzung von Threads zu vermeiden so weit es geht. Besonders du solltest es sein lassen falls du planst Threads in dein GTK Programm einzubauen. GTK ist nicht Thread-Safe. Mittels GThreads kann man es zwar ziemlich sauber und schoen richten, trotzdem wuerde ich so lange es geht darauf verzichten.

Joghurt
28-08-2005, 15:49
Das Buch wirst du wohl wegschmeissen können; es hätte wohl besser "C-Programmierung unter Windows von Anfang an" heißen sollen ;)

PS: C-Programme _kann_ man Plattformunabhängig schreiben, warum ein Tutorialbuch unbedingt Windowsfunktionen nutzen muss, ist mir schleierhaft. Ich würde darauf tippen, dass der Autor selbst nichts anderes als Windows kennt; seine Ratschläge sind daher wohl nicht ganz so ernst zu nehmen.

anda_skoa
28-08-2005, 16:43
|']Unter Linux ist die benutzung von Threads zu vermeiden so weit es geht.

Ansich sollte man immer die Benutzung von Threads vermeiden, weil das die Komplexität eines Programms enorm erhöht wenn verschiedene Bearbeitungspfade "gleichzeitig" auf Daten zugreifen könne.

Wenn man nicht gerade spezielle Sachen braucht, wie zum Beispiel die Erhöhung von Threadprioritäten, dann ist eigentlich kein Unterschied zwischen der Benutzung von Threads auf verschiedenen Plattformen.

Ciao,
_

locus vivendi
28-08-2005, 19:37
Ansich sollte man immer die Benutzung von Threads vermeiden, weil das die Komplexität eines Programms enorm erhöht wenn verschiedene Bearbeitungspfade "gleichzeitig" auf Daten zugreifen könne.
Das was du sagst, ist glaube ich kein guter Rat, weil er eine Gegenanzeige bezüglich Multi-Threading als typisch für die Anwendung dessen darstellt. Natürlich kann es Komplikationen bereiten, wenn mehrere Threads auf dieselben Daten zugreifen. Aber die Haupteinsatzmöglichkeit für Threads ist ja gerade der Fall, das verschiedene Threads auch verschiedene Daten verwenden.

Hier ein Wenig "Advocacy" dafür, Multi-Threading zu berücksichtigen:
http://www.gotw.ca/publications/concurrency-ddj.htm

kurm_de
29-08-2005, 08:34
ich wollte nix mit gtk machen.
ich wollte in der Konsole ein kleines spiel machen, auf dem Bildschirm(in der Konsole) sollte eine kleine Text-Anzeige sein. Und dann wollte ich mit scanf Eingaben von der Tastatur einlesen. Da aber scanf auf ein Enter wartet wollte ich mit einem Thread die Text-Anzeige aktuell halten.
sowas müsste doch möglich sein oder?

gruß kurm_de

SeeksTheMoon
29-08-2005, 09:55
Ich nehme an dass Du auf dem Bildschirm die Zeit weiterlaufen lassen willst, während das scanf das System aufhält. Das wird leider nicht möglich sein:
Prozesse, gemeinsamer Zugriff aufs Terminal usw. führt schon diverse Sachen aus der Betriebssystemprogrammierung ein (oder Du benutzt sowas wie ncurses für die Terminalsteuerung) und ist kein "C von Anfang an" mehr.
Wenn Du erst C lernen willst, dann solltest Du das Programm besser nicht mit solchen Funktionen ausstatten.

[0x[90]|
29-08-2005, 13:27
ich wollte in der Konsole ein kleines spiel machen, auf dem Bildschirm(in der Konsole) sollte eine kleine Text-Anzeige sein. Und dann wollte ich mit scanf Eingaben von der Tastatur einlesen. Da aber scanf auf ein Enter wartet wollte ich mit einem Thread die Text-Anzeige aktuell halten.


Hoert sich fuer mich nach einem IRC Client an. Lass es lieber, wer zu frueh hoch hinaus will, faellt meistens tief.



Ich nehme an dass Du auf dem Bildschirm die Zeit weiterlaufen lassen willst, während das scanf das System aufhält.


Hm, wieso annehmen? Er hat doch bereits ueber eine Stunde vor deinem Post gesagt, was er machen will. ^^

Bye