Programmabsturz

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Programmabsturz

Beitrag von KeyKon »

Ich habe ein Problem mit einem kleinen Programm:
Wenn man das Hauptprogramm per Hand startet läuft es wunderbar, doch wenn ich die Exe mit einem PB-Programm starte bleibt das Programm einfach hängen!
Warum?

Hauptprogramm:

Code: Alles auswählen

Procedure SetWallpaper(FileName.s) 
  SystemParametersInfo_(#SPI_SETDESKWALLPAPER, 0, FileName, #SPIF_UPDATEINIFILE | #SPIF_SENDWININICHANGE) 
EndProcedure 
If InitSprite()
  Delay(1000)
  NewList names.s()
  AddElement(names())
  names() = "C:\Eigene Dateien\Bild1024x768.bmp"
  SelectElement(names(),Random(0))
  date.s = FormatDate("%dd.%mm.%yyyy",Date())
  day = DayOfWeek(Date())
  If Day = 0
    day$ = "So"
  ElseIf Day = 1
    day$ = "Mo"
  ElseIf Day = 2
    day$ = "Di"  
  ElseIf Day = 3
    day$ = "Mi"
  ElseIf Day = 4
    day$ = "Do"  
  ElseIf Day = 5
    day$ = "Fr"  
  ElseIf Day = 6
    day$ = "Sa"
  EndIf    
  OpenScreen(1024,768,32,"DateTop")
  If LoadImage(0,names())
    StartDrawing(ImageOutput())
    LoadFont(0,"Westminster",32)
    DrawingFont(UseFont(0))
    DrawingMode(1)
    FrontColor(0,255,0)
    Locate(5,5)
    DrawText(day$+"-"+date)
    Locate(1024-TextLength(day$+"-"+date)-5,5)
    DrawText(day$+"-"+date)  
    Locate(5,700)
    DrawText(day$+"-"+date)
    Locate(1024-TextLength(day$+"-"+date)-5,700)
    DrawText(day$+"-"+date)
    StopDrawing()
    ResizeImage(0,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
    name.s = Mid(names(),1,Len(names())-12)+Str(GetSystemMetrics_(#SM_CXSCREEN))+"x"+Str(GetSystemMetrics_(#SM_CYSCREEN))+"New.bmp"
    SaveImage(0,name)
    SetWallpaper(name)
  Else
    MessageRequester("Error","DateTop")
  EndIf
  CloseScreen()
EndIf
Das PB-StartProgramm:

Code: Alles auswählen

date.s = FormatDate("%dd",Date())
If RunProgram("C:\Eigene Dateien\DateTop.exe") = 0
  MessageRequester("Error(1)","Konnte DateTop nicht starten!",#MB_ICONERROR)
  End
EndIf
Delay(100000)
Repeat
  Delay(60000)
  If date <> FormatDate("%dd",Date())
    If RunProgram("C:\Eigene Dateien\DateTop.exe") = 0
      MessageRequester("Error(2)","Konnte DateTop nicht starten!",#MB_ICONERROR)
      End
    EndIf
    date.s = FormatDate("%dd",Date())
    Delay(3600000*24-60000)
  EndIf
ForEver
KeyKon
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Programmabsturz

Beitrag von Kiffi »

> doch wenn ich die Exe mit einem PB-Programm starte bleibt das
> Programm einfach hängen!

bleibt Dein Hauptprogramm hängen oder Dein Startprogramm?

Code: Alles auswählen

 If RunProgram("C:\Eigene Dateien\DateTop.exe") = 0
diese Zeile wird also definitiv ausgeführt?

Grüße ... Kiffi
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Ja RunProgram wird ausgeführt und es bleibt das Hauptprogramm hängen,
Ich hab jetzt allerdings rausgefunden ,dass das Hauptprogramm auch alleine abstürzt allerdings nur selten (bis jetzt 1 mal), wenn man mit dem StartProgramm startet stürzt es immer ab.

KeyKon
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Wieso öffnest du überhaupt einen screen wenn du ihn garnicht brauchst? :?
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Was soll das denn mal werden, KeyKon?

Das InitSprite, OpenScreen, CloseScreen und SelectElement(names(),Random(0))
kannst Du rausnehmen, da daß keinen Sinn macht.
OpenScreen() könnte man auch mal testen, da ein CloseScreen
nicht unbedingt Sinn macht, ohne Screen.

Das Bild vergrößern kannst Du auch ohne die obigen Befehle.

If StartDrawing() und If LoadFont() könntest Du auch prüfen,
genauso ob das Bild gespeichert werden konnte.

Irgendwie seltsamer Code, aber sonst sieht es korrekt aus... ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Was soll das denn mal werden, KeyKon?
Ein Programm das jeden Tag ein anderes Hintergrundbild auswählt, auf die Richtige größe bringt und Tag+Datum Draufpinselt
Das InitSprite, OpenScreen, CloseScreen und SelectElement(names(),Random(0))
kannst Du rausnehmen, da daß keinen Sinn macht.
Der Code ist gekürzt und er wählt normalerweise mit SelectElement() ein Bild zufällig aus. Aber ich brauche den Screen doch um 2D-Drawing Operationen auszuführen, oder?
OpenScreen() könnte man auch mal testen, da ein CloseScreen
nicht unbedingt Sinn macht, ohne Screen. If StartDrawing() und If LoadFont() könntest Du auch prüfen,
genauso ob das Bild gespeichert werden konnte.
Hab ich jetzt so gemacht, aber der Code stürzt trotzdem ab (jetzt immer :cry: )

KeyKon
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

KeyKon hat geschrieben:Der Code ist gekürzt und er wählt normalerweise mit SelectElement() ein Bild zufällig aus. Aber ich brauche den Screen doch um 2D-Drawing Operationen auszuführen, oder?
Nur bei ScreenOutput() und SpriteOutput(). Bei Image und Windowoutput nicht.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten