Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 09, 2025 20:28

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 14, 2009 19:40 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Naja wie bereits gesagt:
WENN EIN MANN SICH EINMAL FÜR WAS ENTSCHIEDEN HAT, DANN ÄNDERT ER AUCH NICHT SEINE MEINUNG.

Aber danke für die Zusammenfassung. ;)
Warum ist der WindowsZeiter (YEAR, EINDEUTSCHEN FÜR DEN SIEG!) eigentlich so unpräzise?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 14, 2009 22:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Da kann Windows nichts dafür - den Counter gibts schoon seit Doszeiten und der IST halt mit ca. 18 Steps die Sekunde getaktet. 8)

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 14, 2009 23:07 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
Türlich kann Gates was dafür...

... warum läuft der immernoch wie bei DOS? Ich meine: eine Abwärtskompatibilität zu DOS braucht heut wohl keiner mehr, also warum wurde der nicht aufegebessert?

Oder ist das wie eine Kette zu betrachten?
Win95 hat den wegen DOS kompatibilität,
Win98 hat den wegen Win95,
2000/NT wegen Win98
und XP wegen 2000/NT oder wie? (Ja, es kann sein das ich ein BS vergessen habe/ eins verwechselt habe).

Man hätte da sicher doch auch beide, den alten und einen alternativen neuen machen können.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 15, 2009 06:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Hat man doch. Der neue ist der "High Performance Counter/Timer". Der Zugriff auf diesen ist doch nun wirklich sehr simpel (zwei Funktionen aus der Standard-API, eine einfache Division, fertig)

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 15, 2009 15:22 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
SDH.Prod hat geschrieben:
ich mache ja meine Animationen ja durch eine Anfangszeit Variable und berechne daraus sozusagen den Fortschritt (hab ich mir selbst ausgedacht.
Aber welche Methode ist denn eigentlich üblich?


Also normalerweise verwendet man für alle Instanzen die Zeit z.B seit dem letzten Rendervorgang. Wenn du es so machst musst du die Delta-Zeit nur einmal für alles ausrechnen und dann an deine Animationen weitergeben. Pausieren tust du dann einfach in dem du einer Animation für x Rendervorgänge oder t Sekunden mal keine Delta-Zeit gibst. Also grob so:

Code:
  1.  
  2. class MyAnimation
  3. {
  4.    private single MyProcess;
  5.  
  6.    public void Update(single DeltaTime)
  7.    {
  8.       MyProcess += DeltaTime;
  9.       // evtl. noch anderes Updaten
  10.    }
  11.  
  12.    public void Render()
  13.    {
  14.       // In Abhängigkeit von MyProcess rendern
  15.    }
  16. }


Immer vom Programmstart auszugehn ist unnötig umständlich..

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 15, 2009 18:18 
Offline
DGL Member

Registriert: So Apr 01, 2007 17:51
Beiträge: 42
Wohnort: Hamm/Westf.
<Da kann Windows nichts dafür - den Counter gibts schoon seit Doszeiten und der IST halt mit ca. 18 Steps die Sekunde getaktet.>

Genau genommen wird alle 18,2 Sekunden eins hochgezählt.
Damit wird ein IRQ ausgelöst und vom Bios des Motherboard's abgearbeitet.

Damals unter Dos usw sehr nützlich , weil auf selbst erstellte Zeilen umgelenkt werden konnte.
Ich hatte das damals benutzt für Mausanzeige SVGA im Protected mode.Gabs damals nur im Real mode :shock:


Diese 18,2 "Tick's" konnten per Soft auf KHZ hochgestellt werden und sollte Heuer auch noch mit Klimmzüge gehen.

Gento


Erinnerungen an 1998 :wink:
Code:
  1. UNIT IRQ;
  2. {$F+}
  3. {$D-}
  4. {$S-}
  5. {$O-}
  6. {$R-}
  7. {$Q-}
  8. INTERFACE
  9.     USES Dos;
  10. CONST
  11.     Systemuhr   = 0; Tastatur    = 1; Slave       = 2; RS23_2      = 3;
  12.     RS232_1     = 4; LPT2        = 5; Disketten   = 6; LPT1        = 7;
  13.     Echtzeituhr = 8; Irq2        = 9; Reserviert_0=10; Reserviert_1=11;
  14.     PS_2        =12; Koprozessor =13; Festplatte  =14; Reserviert_2=15;
  15.     Interrupt_Vector: ARRAY[Systemuhr..Reserviert_2] OF byte =
  16.      ($08,  { Time Of Day } $09,  { KeyBoard } $0A,{ PC/AT =  Slave PIC }
  17.       $0B,  { COM2:       } $0C,  { COM1:    } $0D,{ LPT2: AT) }
  18.       $0E,  { Diskette    } $0F,  { LPT1     } $70,{ Real Time Clock }
  19.       $71,  { IRQ2        } $72,  { Reserved } $73,{ Reserved }
  20.       $74,  { PS_2_Maus   } $75,  { CoProces } $76,{ Fixed Disk Controller }
  21.       $77   { Reserved    } );
  22. VAR Interrupt_Adresse: ARRAY[Systemuhr..Reserviert_2] OF Pointer;
  23.    Timer_Pro_Sekunde        :Word;
  24.    Timer_Zaehler            :Word;
  25.    Timer_Merker             :Word;
  26.    Alte_Interrupt_Adresse_1C:Pointer;
  27.    Alte_Interrupt_Adresse_6B:Pointer;
  28.    Alte_Interrupt_Adresse_33:Pointer;
  29.  
  30. CONST
  31.    Interrupt_Masken_Register       = $21;  { Port address for the interrupt mask register. }
  32.    Interrupt_ACK_Register          = $20;  { Place to send the end-Of-Interrupt code. }
  33.    Interrupt_Masken_Register_Slave = $A1;  { Port address of Slave interrupt mask register. }
  34.    Interrupt_ACK_Register_Slave    = $A0;  { Slave Interrupt Controller ack register }
  35.    EOI                             = $20;  { end-Of-Interrupt Code sent to the mask regs. }
  36.  
  37. PROCEDURE AcknowledgeInterrupt;  { AT ONLY!   Works on PC/AT class machines }
  38. PROCEDURE Hardware_Interrupt_Sperren(Ir : Byte);
  39. PROCEDURE Hardware_Interrupt_Freigeben(Ir : Byte);
  40. PROCEDURE Interrupt_IQR_8_1C_Taktfrequenz_Veraendern(Frequenz:Word);
  41. PROCEDURE Interrupt_IQR_8_1C_Taktfrequenz_Restorieren;
  42. PROCEDURE Mein_Interrupt_auf_IQR_1C_Installieren(Proc:Pointer);
  43. PROCEDURE Mein_Interrupt_von_IQR_1C_Entfernen;
  44. PROCEDURE Reset_Interrupts;
  45.  
  46. IMPLEMENTATION
  47. VAR
  48.    Zaehler                  :Byte;
  49.    AltExit                  :Pointer;
  50. PROCEDURE AcknowledgeInterrupt;  { AT ONLY!   Works on PC/AT class machines }
  51. BEGIN
  52.  ASM
  53.  CLI                                    { Interrupts Off }
  54.  MOV AL, EOI                            { Get end-Of-Interrupt Value }
  55.  OUT Interrupt_ACK_Register, AL         { Send it }
  56.  MOV AL, EOI                            { Get end-Of-Interrupt Value }
  57.  OUT Interrupt_ACK_Register_Slave, AL   { Send it }
  58.  STI                                    { Interrupts On }
  59. END;
  60. END;
  61.  
  62. PROCEDURE Hardware_Interrupt_Sperren(Ir : Byte);
  63. BEGIN
  64.  ASM
  65.  CLI
  66. END;
  67.   IF Ir > 7 THEN
  68.    Port [Interrupt_Masken_Register_Slave] := Port [Interrupt_Masken_Register_Slave] OR (1 SHL (Ir - 8))
  69.   ELSE
  70.    Port [Interrupt_Masken_Register] := Port [Interrupt_Masken_Register] OR (1 SHL Ir);
  71.   ASM
  72.    STI
  73.   END;
  74. END;
  75.  
  76. PROCEDURE Hardware_Interrupt_Freigeben(Ir : Byte);
  77. BEGIN
  78.  ASM
  79.  CLI
  80. END;
  81.   IF Ir > 7 THEN
  82.    Port [Interrupt_Masken_Register_Slave] := Port [Interrupt_Masken_Register_Slave] AND ((1 SHL (Ir - 8)) XOR $00FF)
  83.   ELSE
  84.    Port [Interrupt_Masken_Register] := Port [Interrupt_Masken_Register] AND ((1 SHL Ir) XOR $00FF);
  85.   ASM
  86.    STI
  87.   END;
  88. END;
  89.  
  90. PROCEDURE Interrupt_IQR_8_1C_Taktfrequenz_Veraendern(Frequenz:Word);
  91. CONST Grenze=25000;
  92. VAR  IZaehler:Word;
  93. BEGIN
  94.  Asm
  95.  Cli
  96. END;
  97.   IF Frequenz>Grenze THEN Frequenz:=Grenze;
  98.   Timer_Pro_Sekunde:=Frequenz;
  99.   IZaehler:=1193180 DIV Frequenz;
  100.   Port[$43]:=$36;
  101.   Port[$40]:=Lo(IZaehler);
  102.   Port[$40]:=Hi(IZaehler);
  103.   Timer_Zaehler:=Round(Timer_Pro_Sekunde/18.2);
  104.   Timer_Merker:=Timer_Zaehler;
  105.   Asm
  106.    Sti
  107.   END;
  108. END;
  109.  
  110. PROCEDURE Mein_Interrupt_auf_IQR_1C_Installieren(Proc:Pointer);
  111. BEGIN
  112.  GetIntVec($1C,Alte_Interrupt_Adresse_1C);
  113.  SetIntVec($6B,Alte_Interrupt_Adresse_1C);
  114.  SetIntVec($1C,Proc);
  115. END;
  116.  
  117. PROCEDURE Mein_Interrupt_von_IQR_1C_Entfernen;
  118. BEGIN
  119.  SetIntVec($1C,Alte_Interrupt_Adresse_1C);
  120.  SetIntVec($6B,Alte_Interrupt_Adresse_6B);
  121. END;
  122.  
  123. PROCEDURE Interrupt_IQR_8_1C_Taktfrequenz_Restorieren;
  124. BEGIN
  125.  Asm
  126.  Cli
  127. END;
  128.   Port[$43]:=$36;
  129.   Port[$40]:=0;
  130.   Port[$40]:=0;
  131.   Asm
  132.     Sti
  133.   END;
  134. END;
  135. {--------------------------------------------------------------------------}
  136. PROCEDURE Reset_Interrupts;
  137. BEGIN
  138.  FOR Zaehler:=Systemuhr TO Reserviert_2 DO
  139.   SetIntVec(Interrupt_Vector[Zaehler],Interrupt_Adresse[Zaehler]);
  140.  SetIntVec($1C,Alte_Interrupt_Adresse_1C);
  141.  SetIntVec($33,Alte_Interrupt_Adresse_33);
  142.  SetIntVec($6B,Alte_Interrupt_Adresse_6B);
  143.  Interrupt_IQR_8_1C_Taktfrequenz_Restorieren;
  144. END;
  145. {--------------------------------------------------------------------------}
  146. PROCEDURE Abschlussroute;
  147. BEGIN
  148.  Reset_Interrupts;
  149.  Hardware_Interrupt_Freigeben(PS_2);
  150. END;
  151. {--------------------------------------------------------------------------}
  152. BEGIN
  153.  AltExit:=Exitproc;
  154.  ExitProc:=@Abschlussroute;
  155.  FOR Zaehler:=Systemuhr TO Reserviert_2 DO
  156.   GetIntVec(Interrupt_Vector[Zaehler],Interrupt_Adresse[Zaehler]);
  157.  GetIntVec($1C,Alte_Interrupt_Adresse_1C);
  158.  GetIntVec($33,Alte_Interrupt_Adresse_33);
  159.  GetIntVec($6B,Alte_Interrupt_Adresse_6B);
  160. END.
  161.  
:wink: :wink:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 16, 2009 11:39 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Hehe, nice to know.

Wieso Windows immer noch dos in Windows hat, ist der gleiche grund, wieso in windows auch immernoch nt, und 32 bit emulator in 64Bit gibt.
Windows bleibt abwährtskompatibel und verliert dadurch viel stabilität, sicherheit und eine menge code aber es läuft halt die alte Managment, Cad, Animations und so weiter Software noch.
Windows macht kleine Schritte und überlegt mit guten Erfolg(wie ich finde) sehr genau, wann sie welche API durch neue ersetzen.
Der Versuch mit Vista das Sicherheitskonzept auf das von Linux an zu passen ging in die Hose, da an einigen Punkte man nicht mit der Kritik des Benutzers gerechnet hat und das nicht alle Firmen mit ziehen. Ein Beispiel ist das Treiber Zertifikatssystem, welches sich auf alle 5 Layer in Windows Vista etabliert hat. Mit Windows 7 wurde dieses aber in den unteren Layern aufgelockert, da es dort zu so starken Problemen kam, dass diese ein Deadlock verursachen konnten(Beispiel:Festplattentreiber ist nicht zertifiziert, dann kann das System bei Ruhemodus nie wieder hoch kommen und windows ->muss<- neu installiert werden). Treiberzertifikate sind eine gute Idee aber Windows hatte es falsch gemacht, daraus gelernt und entsprechend änderungen geplant. Die Problematik von Softwaresicherheit wurde auch aus der Rümpelkammer hervorgekrammt und man hatte dann nachträglich für Vista und XP ein neuen Security API für Prozesse hoch gezogen. Damit kann man z.B. einen Sicherheitscontext am anfang des Programmes erstellen und einige Sicherheitsaspekte festlegen, wie z.B. das lesen von Speicher für anderen Prozessen verbieten oder das Thread Hooking(welches 99% aller spiele sabotagen verwenden) von aussen. Problematiken wie ausgetauschte DLLs(z.B. opengl32.dll) die eigenen code einschleusen und dann als dependencie die echte nachträglich laden waren schon vorher einfach zu entdecken und gegen zu sichern, da die dll API auch erlaubt zu schauen wieviele treffer in allen DLLs des einen Symbols es gibt und man sogar festlegen kann, dass er z.B. nur das Symbol aus der ersten geladenen DLL nehmen darf und nicht aus der 2.
Obwohl DirectX Input mit DX10 rausgeflogen ist, gibt es immer noch die dxinput8.dll mit jeder DX installation, um abwährtskompatibel zu bleiben aber es ist als obsolet makiert und wird nicht mehr gepflegt.
Es passiert halt schon ne menge aber aufgrund der Kompatibilität bleiben die alten Systeme bestehen und die neuen werden nur sehr selten genutzt bzw. man weiß garnicht, dass sie existieren.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 16, 2009 22:43 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Auch wenn das nichts mit dem Thema zu tun hat, aber seit wann werden denn 32-bit Programme in einem 64-bit Windows "emuliert"? Da passiert meines Wissens nichts außer dass API-Aufrufe zum Kernel auf die 64-bit Version gewrapped werden, oder liege ich da falsch? (Natürlich meine ich nicht die Itanium Prozessoren).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 17, 2009 00:31 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Das wäre wirklich sehr schön aber was du meinst geht nur, wenn man ein 32bit system auf einem anderem 32bit system wiedergeben will oder 64 auf 64.
Für 32Bit hat man ja andere stacks und unterschiedliche variablengrößen als für die 64Bit, da läuft ein minikernel mit einen eigenen dll Sammlung(.../SysWOW64/*.*) unter 64bit Windows und der wirkliche Kernel mit dll Sammlung(.../system32/*.*). Mehr infos findest du hier http://en.wikipedia.org/wiki/WOW64
Ziemlich verwirrend, wenn man überlegt, dass 64bit dll's in system32 liegen, da ja 32 eigentlich für 32Bit steht.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 17, 2009 17:42 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Zitat:
No emulation is required for WOW64 on x86-64 (x64).


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 15 Queries | GZIP : On ]