www.mikrocontroller.net

Forum: PC-Programmierung Datum/Uhrzeit im DOS Fenster, Datum bleibt stehen??


Autor: B. Jue (bjue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe für ein DOS Terminalprogramm (Crosstalk MK.4) ein Script 
geschrieben, welches Daten in eine Datei abspeichert und mit Zeitstempel 
versieht. Wenn ich das über Nacht laufen lasse, findet kein 
Datumswechsel statt! Die Uhr läuft anscheinend weiter.
Wenn ich in einem anderen DOS Fenster mit date oder time oder auch in 
Windows (WinXP) das Datum und die Zeit ändere, wird dies nicht im 
laufenden DOS Programm übernommen, dort läuft die Uhrzeit ohne Änderung 
weiter.

Den gleichen Effekt habe ich mit einem uralten DOS Programm in C, 
welches u.a. Datum und Zeit in der Statuszeile anzeigt. Hier der Source 
Code dazu:
struct tm *PoiTime;
long ltime;

time(&ltime);
PoiTime = localtime(&ltime);
ActHour = PoiTime->tm_hour;
ActMin = PoiTime->tm_min;
ActSec = OldSec = PoiTime->tm_sec;
ActDay = PoiTime->tm_mday;
ActMon = PoiTime->tm_mon+1;
ActYear = PoiTime->tm_year;

Stoppe ich die Programme und frage Datum und Zeit in der jeweiligen DOS 
Box ab, stimmt wieder alles.

Frage: Wird für ein einmal gestartetes DOS Programm in einer DOS Box 
(cmd.exe) eine eigene Uhr ohne Datumsweiterschaltung simuliert???

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zunächst einmal: cmd.exe ist kein "DOS-Fenster", was dort läuft und auf 
Deine Eingaben "date" und "time" reagiert, ist auch kein DOS, sondern 
eine 32-Bit-Konsolen-Applikation, die rein zufälligerweise auch ein paar 
DOS-Kommandos versteht (und die meisten mit zusätzlichen Fähigkeiten 
auch noch ganz massiv aufgebohrt hat).

Wenn Du in einem solchen Fenster ein DOS-Programm startest (ein 
DOS-Programm ist ein 16-Bit-Programm), dann wird ein Prozess namens 
NTVDM gestartet, der eine virtuelle DOS-Umgebung zur Verfügung stellt. 
Dein DOS-Programm bekommt von dieser Umgebung eine standardisierte 
PC-Hardware vorgegaukelt.

Wenn Du aber Dein DOS-Programm beendest, beendet sich auch NTVDM, und 
Deine vermeintlichen DOS-Befehle "date" und "time" werden wieder von 
cmd.exe ausgewertet -- das lässt also keinerlei Rückschluss auf das 
Zeitverhalten innerhalb von NTVDM zu.

Um das zu testen, musst Du in cmd.exe command.com aufrufen und dann erst 
Dein DOS-Programm bzw. Deine Testkommandos.

Wenn Du Dir eine Verknüpfung auf command.com erstellst, kannst Du Dir 
mal die Eigenschaften der Verknüpfung ansehen, dort wird unter 
"Programm" ein Knopf "Erweitert" angeboten, mit dem unter anderem eine 
"kompatible Timerhardwareemulation" aktiviert werden kann.
Desweiteren gibt es unter "Sonstiges" eine Checkbox "Immer aussetzen", 
die Du vermutlich deaktivieren solltest.

Autor: B. Jue (bjue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank erst einmal für die ausführliche Antwort!
Ich habe jetzt alle 4 Kombinationen ("kompatible Timerhardwareemulation" 
und "Immer aussetzen") in der Verknüpfung auf command.com getestet. Es 
bleibt dabei: Uhrzeit wird richtig emuliert, Datum bleibt stehen.
Also gehe ich erst mal davon aus, dass NTVDM das Datum um 00.00 Uhr 
nicht weitersetzt.
(In meinem Script schalte ich das Datum nun eben selbst weiter.)

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt im PC-Bios (oder in DOS, bin mir nicht mehr sicher) eine Art 
Bug, und zwar wird das Datum nicht automatisch weitergeschaltet. Beim 
Abfragen der Zeit gibt es ein Bit "Midnight rollover", das ausgewertet 
werden muss, um das Datum zu inkrementieren.
Das Bit wird nach dem Lesen der Zeit automatisch gelöscht.
Der Befehl TIME führt diese Korrektur wohl aus.
Wird die Zeit anders ausgelesen als mit den BIOS- resp. DOS-INT, so 
bleibt die Korrektur wohl aus.
Vielleicht hat MS dieses Verhalten auch in NTVDM eingebaut, da ja alles 
kompatibel bleiben muss.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.