Deutsch
Forum

Erledigt: Programm läßt sich nicht beenden

 
- Seite 1 -



Peter
Gückstock
Hallo,

habe ein Problem beim beenden eines Programms
Das Programm wird über einen Button normal beendet und ist auch vom Bildschirm verschwunden.
Im Taskmanager läuf der prozess aber weiter, d.h. der Interpreter bleibt aktiv. Auch die EXE des Programms verhält sich so.
Habt Ihr einen Tip zur Fehlersuche oder eine Idee was soetwas verursachen kann?
Habe schon 2 Tage mit Grübeln verloren.

vielen Dank
 
Peter G.
Win XP, XProfan10
16.11.2008  
 



 
- Seite 2 -


Klar das mag auch scheinbar helfen, bleibt aber Fusch der an anderer Stelle wieder zum Vorschein kommen kann.

Ist aber Wurscht, wenn es denn ausreiche...
 
17.11.2008  
 




Peter
Gückstock
Hallo,

Ich habe jetzt nur mal den Hauptteil angehängt. Unter VISTA und XProfan 11 (mit dem neusten Update von Roland)
bleibt der Prozess nach dem beenden des Programms bestehen und unetr Windows XP und XProfan 10
stürzt XProfan nach dem Beenden des Programms ab
Echt zum Verzweifeln, denn alle anderen Programme funktionieren.

Hilfe,Hilfe....
KompilierenMarkierenSeparieren
 $I PROFALT.INC
 $I SKControl.inc
 $I Listview_Funktionen.inc
 $I WFMCAL.INC
declare image#,string#,h1&,h2&,h3&,h4&,h5&,h6&
Buttons
declare Feiertage&,DateButton1&,DateButton2&,ladenals&,speichernals&,Jubilar&,info&,adress&
declare adresse%,Jubilar%,ende&,beenden&,progende%
declare Text%
Dialoge_Controlls
declare MonthCal1&,Jubibox%,listview_Jubi&,Adressbox&
Farben für Kalender
declare bg&,txt&,titlebg&,titletext&,calcol&,month&
für DLL
declare skDll&,lvdll&
skDll& = UseDll("SKControl.dll")
lvdll& = usedll("Listview.dll")
SKCtrl_InitDll()
=======================Hauptprogramm============================================
SetTrueColor 1
WindowStyle 16
WindowTitle "PGM    Terminplaner  lite        Version alfa 0.1"
Window 100,100-900,600
cls RGB(210,210,210)
SetDialogFont 1
UseFont "Batang",10,0,0,0,0
startPaint %Hwnd
Usebrush 1,RGB(160,160,160)
RoundRect 4,8-878,52;10,10
endpaint
---------------Buttons-----------------------------------------------
dim image#,255
dim string#,255
string image#,0 = @add$(GetDir$("@"),"\feier.rle")
string string#,0 = ""
Feiertage& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),540,10,40,40,%hInstance)
Create("Tooltip",%HWnd,Feiertage&,"Die Feiertage werden berechnet!")
string image#,0 = @add$(GetDir$("@"),"\ok.rle")
string string#,0 = "laden      "
DateButton1& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(160,160,160),10,10,110,40,%hInstance)
string image#,0 = @add$(GetDir$("@"),"\ok.rle")
string string#,0 = "sichern"
DateButton2& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(160,160,160),120,10,115,40,%hInstance)
string image#,0 = @add$(GetDir$("@"),"\laden.rle")
string string#,0 = ""
ladenals& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),300,10,40,40,%hInstance)
h1&=Create("Tooltip",%HWnd,ladenals&,"Datei manuell laden!")
string image#,0 = @add$(GetDir$("@"),"\speichern.rle")
string string#,0 = ""
speichernals& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),340,10,40,40,%hInstance)
h2&=Create("Tooltip",%HWnd,speichernals&,"Datei speichern als..!")
string image#,0 = @add$(GetDir$("@"),"\fett.rle")
string string#,0 = ""
Jubilar& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),400,10,40,40,%hInstance)
string image#,0 = @add$(GetDir$("@"),"\help.rle")
string string#,0 = ""
info& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),440,10,40,40,%hInstance)
string image#,0 = @add$(GetDir$("@"),"\lupe.rle")
string string#,0 = ""
adress& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),480,10,40,40,%hInstance)
h5&=Create("Tooltip",%HWnd,speichernals&,"Adresse suchen!")
jubilar%=@Create("Button",%Hwnd,"Jubiläen eintragen",5,550,150,20)
adresse%=@Create("Button",%Hwnd,"Adressen eintragen",155,550,150,20)
string image#,0 = @add$(GetDir$("@"),"\ende.rle")
string string#,0 = ""
ende& = SKCtrl_CreateClrImageButton(%Hwnd,image#,string#,0,0,RGB(110,40,20),RGB(234,234,234),830,10,40,40,%hInstance)
h6&=Create("Tooltip",%HWnd,ende&,"Das Programm wird beendet!")
SetStyle h1&,$0000040  Style für ToolTips
SetStyle h2&,$0000040
SetStyle h3&,$0000040
SetStyle h4&,$0000040
SetStyle h5&,$0000040
SetStyle h6&,$0000040
----CONTROLS--------------------
text% = Create("RichEdit",%HWnd,"",300,90,550,350)
SendMessage(text%,$0443,0,rgb(200,200,180))
Let MonthCal1&=Control("SysMonthCal32","",$54800005,10,60,220,175,%hwnd,0,%hinstance,$0)
Jubibox%=@Create("ListBox", %Hwnd, 1, 10, 250, 220, 150)
listview_Jubi&=CreateListview(%Hwnd,%hinstance,0,Rgb(255,255,255),-1,$31)
InsertColumn listview_Jubi&,"Monat",100,0
InsertColumn listview_Jubi&,"Tag",50,0
InsertColumn listview_Jubi&,"Name",220,0
InsertColumn listview_Jubi&,"Text",380,0
AutoSortListview listview_Jubi&,2,2,2,2
Adressbox&=CreateListview(%Hwnd,%hinstance,0,Rgb(255,255,255),-1,$31)
InsertColumn Adressbox&,"Name",160,0
InsertColumn Adressbox&,"Vorname",120,0
InsertColumn Adressbox&,"Firma",180,0
InsertColumn Adressbox&,"Strasse",150,0
InsertColumn Adressbox&,"Postleizzahl",80,0
InsertColumn Adressbox&,"Ort",180,0
InsertColumn Adressbox&,"Telefon",120,0
InsertColumn Adressbox&,"Mobil",120,0
InsertColumn Adressbox&,"E-Mail",190,0
ShowListView(Adressbox&,4,450,878,80)
InitMessages(%Hwnd)
-------------- Farben für Kalender --------------------------------------------------
bg&= rgb(255,255,0)
txt&=rgb(0,0,0)
titlebg&= rgb(255,0,241)Farbe für Titelzeile, Wochentage und Wochenzahlen
titletext&= rgb(255,255,0)Titelfarbe des Monatsnamens
calcol&= rgb(255,255,255) Farbe des Fensters
month&= rgb(192,192,192)
setmccolors(monthcal1&,bg&,txt&,titlebg&,titletext&,calcol&,month&)
----------- Steuerung der Aktionen --------------------------------

WhileNot ende&=1

    WaitInput
    ------------------------------------------------------------------------

    If GetFocus(Jubilar%)

        jubi

    endif

    ------------------------------------------------------------------------

    If GetFocus(adresse%)

        Adressen

    endif

    -------------------------------------------------------------------------

    If GetFocus(DateButton1&)             Aufruf Dialog zum Laden/Speichern

        Dim DateTimePick#,20
        DTP_GETSYSTEMTIME(MonthCal1&,DateTimePick#)
        Let Meldung$ = Str$(word(DateTimePick#,6));".";Str$(word(DateTimePick#,2));".";Str$(word(DateTimePick#,0))
        Monat$= Str$(word(DateTimePick#,2))
        Dispose DateTimePick#
        Eintrag_laden

    Endif

    -------------------------------------------------------------------------------

    If GetFocus(DateButton2&)             Aufruf Dialog zum Laden/Speichern

        Dim DateTimePick#,20
        DTP_GETSYSTEMTIME(MonthCal1&,DateTimePick#)
        Let Meldung$ = Str$(word(DateTimePick#,6));".";Str$(word(DateTimePick#,2));".";Str$(word(DateTimePick#,0))
        Dispose DateTimePick#
        Eintrag_speichern

    Endif

    ------------------------------------------------------------------------------

    if getfocus(beenden&)

        @destroywindow(Feiertagdialog&)

    endif

    -------------------------------------------------------------------------------

    if getfocus(speichernals&)

        datei_speichernals

    endif

    ---------------------------------------------------------------------------------

    if getfocus(ladenals&)

        Datei_LadenAls

    endif

    ---------------------------------------------------------------------------------

    if getfocus(Feiertage&)

        Feiertage

    endif

    ----------------------------------------------------------------------------------

    if getfocus(Jubilar&)

        jubi_manuell

    endif

    -------------------------------------------------------------------------------------

    IF GETFOCUS(Info&)

        info

    endif

    -------------------------------------------------------------------------------------

    IF GETFOCUS(adress&)

        suchen

    endif

    --------------------------------------------------------------------------------------

    If getfocus(ende&)

        progende%=@Messagebox("Soll das Programm ohne speichern beendet werden?","ACHTUNG",308)

        if progende%=6

            @destroywindow(Aktionsdialog&)
            ende&=1

        endif

    endif

    ----------------------------------------------------------------------------------------

endwhile

freedll lvdll&
freedll skdll&
dispose image#
dispose string#
end
 
Peter G.
Win XP, XProfan10
17.11.2008  
 



Du musst schon alle notwendigen Dateien anhängen, z.B. in einer ZIP-Datei, damit es möglichst jeder testen kann - wenn Du das willst.

Ich habe z.B. weder die Includes noch DLLs dafür.

Da die SKControl.dll und Listview.dll "läuft" wäre die erste Frage an die jeweiligen Autoren: Eigene Threads?

Wenn jeweils ja, dann kann man beide DLLs so nicht nutzen, ohne den Hauptthread des XProfan in Gefahr zu bringen. (Abstürze, Fehlermeldungen, ...)
 
17.11.2008  
 




Frank
Abbing
Die Listview.dll erzeugt keine Threads.

Mir ist aufgefallen, im Code wird ein InitMessages(%Hwnd) benutzt, aber kein CloseMessages(%Hwnd). Da hier beide Dlls wohl das Hauptfenster subclassen, ist auch die Reihenfolge der Dlls beim Abschalten des Subclassings einzuhalten. Die sicherste Methode ist aber in jedem Fall, das Hauptfenster zu zerstören. Damit wird die gesubclasste WindowProc auf jeden Fall entfernt, und der externe Code wird nicht mehr ausgeführt, der u. U. den Absturz erzeugt. Das hat mit Fusch rein gar nichts zu tun.
 
17.11.2008  
 



Gebe Fank recht
Gehe in meiner Beendigungsprocedur so vor:

PROC Beenden
Delete Object..... alle Fonts usw...
CloseMessages(die jeweilige Fenster-Variabel) schreibt die Hilfe der LISTVIEW.DLL vor
Destroywindow(%HWnd) - damit wird alles zerstört
EE%=1 ...abhängig von der Schleife im Programm - wenn EE% vorher 0 war
END Rückfall in alte Basic-Zeiten aus purer Gewohnheit
ENDPROC

Das ist nur ein Beispiel und sieht von Programm zu Programm anders aus. Allerdings wird mit dieser Art des Beenden auch anstanslos beendet. Ende ;)
 
17.11.2008  
 




E.T.
Hab eben mal ein älteres Prog von mir rausgesucht, welches die SKControl.dll nutzt.
Auch diese Dll erzeugt (bei mir ) wärend des Programm-Ablaufs keine eigenen Threads.
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
17.11.2008  
 



Ok, dann können wir bei der skcontrol vielleicht von Timern ausgehen, was keine Probleme machen sollte, besonders wenn die Timer per subClassing abgefragt werden.


Die sicherste Methode ist aber in jedem Fall, das Hauptfenster zu zerstören. Damit wird die gesubclasste WindowProc auf jeden Fall entfernt, und der externe Code wird nicht mehr ausgeführt, der u. U. den Absturz erzeugt.


Das ist so einfach nur falsch - ist mir aber Wurstegal wenn damit eine Lösung gefunden wurde, die (nicht) funktioniert.
 
17.11.2008  
 




Frank
Abbing
iF
Ok, dann können wir bei der skcontrol vielleicht von Timern ausgehen, was keine Probleme machen sollte, besonders wenn die Timer per subClassing abgefragt werden.

iF
Die sicherste Methode ist aber in jedem Fall, das Hauptfenster zu zerstören. Damit wird die gesubclasste WindowProc auf jeden Fall entfernt, und der externe Code wird nicht mehr ausgeführt, der u. U. den Absturz erzeugt.


Das ist so einfach nur falsch - ist mir aber Wurstegal wenn damit eine Lösung gefunden wurde, die (nicht) funktioniert.


iF
Damit wird die gesubclasste WindowProc auf jeden Fall entfernt, und der externe Code wird nicht mehr ausgeführt, der u. U. den Absturz erzeugt.


Es ist falsch, dass die Aussage falsch ist. Ich lasse mich aber gerne umstimmen, sobald du das Gegenteil bewiesen hast.
 
17.11.2008  
 



Nunu, komische Formel
 
17.11.2008  
 




E.T.
Also, es ist falsch, da die Aussage falsch ist ??

Sollten den, wenn ich mein (X)Profan-Prog (ordentlich) beende, eigentlich alle Threads, welche mein Prog erzeugt,
auch mit beendet werden ??

Wenn ich Word, Excel oder Paintshop oder sonst irgendwelches Programm beende, muß ich doch auch nicht nachschauen,
ob noch was davon läuft.

Und wenn ich meinem XProfan-Prog sage: ENDE!! (in Form von END), dann gehe ich davon aus, das auch wirklich alles beendet wird !!
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
18.11.2008  
 



Schau mal was bei ExitProcess [...]  alles passiert, anders als bei [...]  welches Verhalten Du ja eher beschreibst. End macht wohl ExitProcess.
 
18.11.2008  
 




Peter
Gückstock
Hallo Profaner,

vielen Dank für die Tipps,
ich glaube ,dass ich den Fehler gefunden habe. Da ich mit den $H windows.ph,$H structs.ph,$H messages.ph,$H commctrl.ph
und $H shellapi.ph arbeite, habe ich beim beenden "OnApplicationExit" vergessen. Jetzt funktioniert alles.

Gruß Peter
 
Peter G.
Win XP, XProfan10
28.11.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

12.971 Betrachtungen

Unbenanntvor 0 min.
AndreasS12.12.2018
Georg Teles19.03.2016
Alexander Zur Hoerst18.01.2012
Peter Max Müller11.12.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie