Seite 2 von 2

Verfasst: 11.04.2008 16:50
von AND51
ts-soft hat geschrieben:
AND51 hat geschrieben:Wieso verwendest du für das Datum/die Zeit nicht einfach Date() und FormatDate()?
Weil Du nicht aufmerksam liest :mrgreen:
PureBasic 3.3
Huch! :coderselixir:

Verfasst: 11.04.2008 17:07
von ts-soft
Kawentsmann hat geschrieben:@ts-soft: das mit dem Delay() hab ich auch nur zu Testzwecken eingesetzt
Aber genau aus diesem Grund wirds eben nicht jede Sekunde aktualisiert,
sondern nur wenn das OS gerade Zeit hat :mrgreen:

Die Ausgabe sollte in einem TimerCallback erfolgen, unabhängig vom
standard-loop

Urzeit

Verfasst: 11.04.2008 20:36
von kswb73
Wenn du deinen Code nicht großartig verändern willst kannst du es auch so machen:

Code: Alles auswählen

time.SYSTEMTIME
Urzeit.s
If OpenConsole()<>0
 Repeat
  GetLocalTime_(time)
  If Not Str(time\wHour)+":"+Str(time\wMinute)+":"+Str(time\wSecond)=Urzeit
  PrintN(Str(time\wHour)+":"+Str(time\wMinute)+":"+Str(time\wSecond))
  EndIf
  Urzeit=Str(time\wHour)+":"+Str(time\wMinute)+":"+Str(time\wSecond)
  last=time
 Until Inkey()<>""
 CloseConsole()
EndIf 

Verfasst: 11.04.2008 21:03
von ts-soft
>> Wenn du deinen Code nicht großartig verändern willst kannst du es auch so machen:
Wenn man die CPU Power für nichts anderes benötigt :mrgreen:

CPU schonender

Verfasst: 11.04.2008 21:13
von kswb73

Code: Alles auswählen

#Genauigkeit=10
time.SYSTEMTIME
Urzeit.s
If OpenConsole()<>0
 Repeat
  GetLocalTime_(time)
  If Not Str(time\wHour)+":"+Str(time\wMinute)+":"+Str(time\wSecond)=Urzeit
  PrintN(Str(time\wHour)+":"+Str(time\wMinute)+":"+Str(time\wSecond))
  EndIf
  Urzeit=Str(time\wHour)+":"+Str(time\wMinute)+":"+Str(time\wSecond)
  last=time
  Delay(#Genauigkeit)
 Until Inkey()<>""
 CloseConsole()
EndIf 
Schonender und Leistungseinstellend

Verfasst: 11.04.2008 21:58
von PMV
Kawentsmann hat geschrieben:@bobobo: es liegt also am OS... ich hab nix anderes erwartet xD
wer hat das denn geschrieben? :?
Das Problem sitzt in 99% aller fälle vor dem PC ... dafür gibs hier das
Anfänger-Forum <) Unwissenheit :wink:

Delay() ist nicht dafür zuständig, die exakte übergebene Zeit zu warten,
sondern der übergebende Parameter ist eher die gewünschte Mindestzeit.
Wenn du Delay() aufrufst, wünschst du von deinem PC, das dieser nun
einem anderen Prozess die CPU geben soll. Dabei sagst du ihm noch, wie
lang du nun in deinem Prozess nichts tun möchtest. Das OS ist dafür
zuständig, alle Prozesse auf die CPU (gerecht) zu verteilen.

Jeder Prozess bekommt ein bestimmtes Zeitfenster. Mit Delay() sagst du,
du willst kein Zeitfenster für die nächsten X Millisekunden. Und wenn du
dann wieder eins haben willst, musst du warten, bis das OS dir die CPU
gibt. Für eine zu langsame CPU (oder schlechten Programmierstiel) kann
dein OS nix :wink:

MFG PMV

Verfasst: 12.04.2008 03:39
von tobe
@kswb73
ich glaub "Not" gibt es in v3.3 noch nicht ;)

@Kawentsmann
dein orginal code läuft bei mir ohne pausen (XP SP2 - 2 minuten testzeit),
ich würde es vom prinzip auch so wie kswb73 machen nur mit STARGÅTE's funktion:

Code: Alles auswählen

Procedure.s Time(string$)
  time$=Space(1000)
  GetTimeFormat_(#LOCALE_USER_DEFAULT,0,0,string$,@time$,1000)
  ProcedureReturn Trim(time$)
EndProcedure

If OpenConsole()<>0
  Repeat
    tmp$ = Time("HH':'mm':'ss")
    If tmp$ <> time$
      time$ = tmp$
      PrintN(time$)
    EndIf
    Delay(100)
  Until Inkey()<>""
  CloseConsole()
EndIf

Verfasst: 18.04.2008 17:59
von Radiate
*haha* Hab exakt das gleiche Prob bei meinem Server. ^^
Jedesmal wenn ein Ereignis Statt findet soll er die aktuelle Zeit davor ausgeben, aber statt dessen gibt er immer die allererste Zeit wieder aus.

Hier mein Code:

Code: Alles auswählen

Date$ = FormatDate("%yyyy/%mm/%dd", Date())
Time$ = FormatDate("%hh:%ii:%ss", Date())
Hier mein Prog (Server):

Code: Alles auswählen

InitNetwork()
If ExamineIPAddresses()
  IP.l = NextIPAddress()
  NextIP = NextIPAddress()
EndIf
*buffer = AllocateMemory(100)

Date$ = FormatDate("%yyyy/%mm/%dd", Date())
Time$ = FormatDate("%hh:%ii:%ss", Date())

If CreateNetworkServer(0, 6654,#PB_Network_TCP)
  OpenWindow(#ComNet_Server,0,0,400,600,"ComNet Server 0.0.1",#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) And CreateGadgetList(WindowID(#ComNet_Server))
  SetWindowCallback(@WindowCallback())
  AddKeyboardShortcut(#ComNet_Server,#PB_Shortcut_Escape,#ComNet_Quit)
  EditorGadget(#ComNet_In,10,10,380,580,#PB_Editor_ReadOnly)
  AddGadgetItem(#ComNet_In,-1,"» "+Date$+" "+Time$+"")
  AddGadgetItem(#ComNet_In,-1,"» Server erfolgreich erstellt!")
  AddGadgetItem(#ComNet_In,-1,"» Server unter folgender TCP/IP erreichbar: " + IPString(NextIP) + ":6654")
  AddGadgetItem(#ComNet_In,-1,"")
  AddGadgetItem(#ComNet_In,-1,"")
  Repeat
    GadgetID = WaitWindowEvent()
    If WindowEvent() = #PB_Event_CloseWindow
      Quit = 1
      close_fadeout(#ComNet_Server)
    EndIf
    Select EventGadget()
      Case #ComNet_Quit
        Quit = 1
        close_fadeout(#ComNet_Server)
    EndSelect
    Select NetworkServerEvent()
      Case 1
        AddGadgetItem(#ComNet_In,-1,"» "+Time$+" Client hat sich eingeloggt!")
        ClientID.l = EventClient()
        remoteip$=IPString(GetClientIP(ClientID))
        AddGadgetItem(#ComNet_In,-1,"» Client hat die IP: "+remoteip$)
      Case 2
        length.l = ReceiveNetworkData(ClientID, *buffer, 100)
        String$ = PeekS(*buffer, 100)
        AddGadgetItem(#ComNet_In,-1,"» Empfang:" + String$)
        SendNetworkData(ClientID, *buffer, 100)
      Case 4
        AddGadgetItem(#ComNet_In,-1,"» "+Time$+" Client hat die Verbindung beendet!")
        ClientID.l = EventClient()
    EndSelect
  Until Quit = 1
EndIf
FreeMemory(*buffer)
End

Verfasst: 18.04.2008 22:43
von PMV
Date() gibt die aktuelle Zeit aus. Wenn du das ding nur ein mal vor deiner
Schleife aufrufst, holst du auch nur ein mal die aktuelle Zeit.

Um also jedes mal wieder die aktuelle Uhrzeit angezeigt zu bekommen,
brauchst du keine Variablen, sondern nutzt direkt

Code: Alles auswählen

FormatDate("%hh:%ii:%ss", Date())
dort, wo du jetzt die Variablen nutzt.

MFG PMV