tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1051
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Engfer Engfer ist offline Grünschnabel
    Registriert seit
    Aug 2004
    Beiträge
    2
    Hallo,
    ich bin nicht der VB-Freak, nutze eigentlich VB6 nur für Sachen, die ich nicht mit Clickexe3 hinbekomme.

    Zu meinem Problem:
    Ich habe ein Programm geschrieben, mit welchem ich eine Textdatei (Dat_Sender.txt) auslese.

    Inhalt:
    4

    2400
    ATZXL3
    26
    1/1:Kommunikationsausfall


    Aufgrund dieser Daten wird die Rufnummer angerufen.

    Danach soll sich das Programm beenden.

    Das VB-Script sieht folgendermaßen aus:

    Dim schnittstelle As Integer
    Dim amt As String
    Dim baudrate As String
    Dim inizialisierung As String
    Dim rufnummer As String
    Dim empfaengerrufnummer As String
    Dim meldung As String
    Dim setting As String
    Dim modemantwort As String
    Dim t As Integer
    Dim stufe As Integer


    Private Sub abbrechen_Click()
    abbrechen.Enabled = False
    abbrechen.Visible = False
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Abbruch" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'MSComm1.PortOpen = False
    End Sub


    Private Sub Form_Load()
    Let stufe = 0
    'Daten von FRM übernehmen
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Input As #1
    Input #1, schnittstelle
    Input #1, amt
    Input #1, baudrate
    Input #1, inizialisierung
    Input #1, empfaengerrufnummer
    Input #1, meldung
    Close #1
    'Textfelder füllen
    'Let meldetext.Text = meldung
    Let empfaenger.Text = empfaengerrufnummer
    'Setting String (Schnittstelleneinstellung) zusammenstellen
    Let setting = baudrate + ",N,8,1"
    'Schnittstelle vorbereiten
    MSComm1.CommPort = schnittstelle
    'MsgBox schnittstelle
    MSComm1.Settings = setting
    MSComm1.PortOpen = True
    MSComm1.RThreshold = 1
    MSComm1.SThreshold = 1
    MSComm1.InputLen = 0
    'Initialisierungsstring senden
    ini(0).Visible = True
    MSComm1.Output = inizialisierung + Chr(13)
    For t = 0 To 10000: Next
    melde1(0).Visible = True
    waehle(1).Visible = True
    MSComm1.Output = "ATX3DT" + amt + empfaengerrufnummer + Chr(13)
    stufe = 3
    melde2(1).Visible = True
    'verbindung(0).Visible = True
    MSComm1.Handshaking = comRTS

    End Sub

    Private Sub Form_Unload(Cancel As Integer)
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'MSComm1.PortOpen = False
    End Sub

    Private Sub MSComm1_OnComm()
    modemantwort = MSComm1.Input
    'modemantwort = Replace$(modemantwort, Chr(13), "")
    'modemantwort = Replace$(modemantwort, Chr(10), "")
    Text1.Text = Text1.Text + modemantwort ' + Chr(13)
    If stufe = 3 Then
    If InStr(1, modemantwort, "NO CARRIER") <> 0 Then
    'MsgBox "NO CARRIER!"
    'melde2(1).Caption = "ERROR!"
    'melde2(1).ForeColor = &HFF&
    'melde2(1).Visible = True
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Ruf_ok" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    If InStr(1, modemantwort, "BUSY") <> 0 Then
    'MsgBox "NO CARRIER!"
    'melde2(1).Caption = "ERROR!"
    'melde2(1).ForeColor = &HFF&
    'melde2(1).Visible = True
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Ruf_ok" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    End If
    If stufe < 3 Then
    If InStr(1, modemantwort, "NO CARRIER") <> 0 Then
    'MsgBox "NO CARRIER!"
    melde2(1).Caption = "ERROR!"
    melde2(1).ForeColor = &HFF&
    melde2(1).Visible = True
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Fehler" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    If InStr(1, modemantwort, "ERROR") <> 0 Then
    'MsgBox "ERROR!"
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Fehler" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    If InStr(1, modemantwort, "NO DIALTONE") <> 0 Then
    'MsgBox "NO DIALTONE!"
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Fehler" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    If InStr(1, modemantwort, "BUSY") <> 0 Then
    MsgBox "BUSY!"
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Fehler" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    If InStr(1, modemantwort, "NO ANSWER") <> 0 Then
    'MsgBox "NO ANSWER!"
    Open "C:\Funkruf-Manager\Dat_Sender.txt" For Output As #1
    Print #1, "Fehler" + Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Print #1, Chr(13)
    Close #1
    Unload Telefon_Fenster
    Set Telefon_Fenster = Nothing
    'End
    'Unload Me
    End If
    End If
    If InStr(1, modemantwort, "OK") <> 0 Then
    'MsgBox "Test bestanden - OK"
    If melde1(0).Visible = True Then
    melde2(1).Visible = True
    'verbindung(0).Visible = True
    End If
    melde1(0).Visible = True
    End If

    End Sub


    Leider ist es so, dass das Programm beim 1. Mal super funktioniert, allerdings ab dem 2. oder 3. Programmstart wird das Fenster nicht mehr geöffnet und das Programm steht im Task-Manager, kann aber nicht geschlossen werden, in den meisten Fällen wird kann man den PC sogar nicht mehr herunterfahren!

    Ich habe die Befürchtung, dass das Programm nicht richtig beendet wird.

    Wer kann helfen?

    Andreas
     

  2. #2
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Um das Programm endgültig zu Beenden benutze am Bestern den End-Befehl, zum Beispiel in Form_Unload oder am Ende der "letzten" Prozedur.
     
    hihi = -h²

  3. #3
    Engfer Engfer ist offline Grünschnabel
    Registriert seit
    Aug 2004
    Beiträge
    2
    Ich habe Deine Lösung ausprobiert - leider ohne Erfolg.

    Desweiteren habe ich folgende Entdeckung gemacht:
    Ich habe das Modem nun testweise mit dem Hyperterminal angesprochen. Das funktioniert optimal. Als ich aber das Hyperterminal geschlossen und danach wieder gestartet habe ist das Hyperterminal genau so abgestürzt - selbst WinXP ließ sich nicht mehr herunterfahren.

    Ich denke mal, dass das Problem eher beim Modem/Treiber zu suchen ist.

    Trotzdem danke!

    Andreas
     

  4. #4
    Avatar von JensG
    JensG JensG ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Gera (Thüringen)
    Beiträge
    517
    Original geschrieben von Shakie
    Um das Programm endgültig zu Beenden benutze am Bestern den End-Befehl, zum Beispiel in Form_Unload oder am Ende der "letzten" Prozedur.
    Lieber nicht.

    Wer "End" benutzt, würde als Busfahrer an der letzten Haltestelle den Bus
    sprengen, statt die letzten Fahrgäste freundlich hinauszubefördern.
    Auf Deutsch:
    Bei End hat das Programm keine Möglichkeit, noch
    irgendwelche Aufräumarbeiten durchzuführen.
    Ein Programm endet automatisch, wenn die letzte Form ge-unloadet wird.
    Wenn also Deine Sub Main ohne ein End nicht terminieren will, wird
    irgendeine Form nicht richtig entladen.

    Gruß
    Jens
     

  5. #5
    Avatar von Shakie
    Shakie Shakie ist offline Mitglied Diamant
    Registriert seit
    May 2004
    Ort
    Europa
    Beiträge
    2.048
    Ein Programm endet automatisch, wenn die letzte Form ge-unloadet wird.
    Das stimm so aber auch nicht!
    Beispiel: Man setzt einen Timer auf eine Form. In der Timer-Sub schreibt man nun Code, der sehr viel CPU-Leistung in Anspruch nimmt.
    Wenn nun das Unload-Ereignis der Form eintritt, bleibt der Timer einfach aktiv (ich spreche aus Erfahrung) und das Programm läuft noch, obwohl alle Formen ge-unloadet sind!
     
    hihi = -h²

  6. #6
    Avatar von JensG
    JensG JensG ist offline Mitglied Platin
    Registriert seit
    Jun 2004
    Ort
    Gera (Thüringen)
    Beiträge
    517
    Original geschrieben von Shakie
    Beispiel: Man setzt einen Timer auf eine Form. In der Timer-Sub schreibt man nun Code, der sehr viel CPU-Leistung in Anspruch nimmt.
    Wenn nun das Unload-Ereignis der Form eintritt, bleibt der Timer einfach aktiv (ich spreche aus Erfahrung) und das Programm läuft noch, obwohl alle Formen ge-unloadet sind!
    Ich will mich nicht mit dir streiten oder dir zunahe treten aber.
    das stimmt wohl so und das habe ich mir auch nicht so einfach
    ausgedacht sondern so von wirklichen Profis gelernt.
    Scheinbar werden die Forms zwar geschlossen aber im Hintergrund
    ist eine noch aktiv und das liegt am fehlerhaften Code.
    Eine Form wird eben nicht richtig entladen. Das sieht man
    auch daran das die Temporären Dateien die VB anlegt dann nicht
    gelöscht werden.

    Wozu soll ein Timer gut sein der Windows oder dein Programm
    so blockiert das es nicht nicht richtig beendet ?
    Wie wäre es den Intervall etwas zu verkürzen.

    Bei sauberer Programmierung reicht immer der Unload Befehl.
    Ich habe selbst schon solche Probleme gehabt, aber es immer
    ohne End hinbekommen.

    Gruß
    Jens
     

Ähnliche Themen

  1. Windows XP stürzt immer ab
    Von alexis im Forum Microsoft Windows
    Antworten: 3
    Letzter Beitrag: 19.02.10, 15:20
  2. PC stürzt immer ab!
    Von timo0804 im Forum Microsoft Windows
    Antworten: 9
    Letzter Beitrag: 30.09.08, 18:47
  3. Kopete stürzt immer ab!
    Von Kalma im Forum Linux & Unix
    Antworten: 7
    Letzter Beitrag: 20.04.07, 21:19
  4. PhotoShop stürzt immer ab
    Von meilon im Forum Hardware
    Antworten: 2
    Letzter Beitrag: 21.03.05, 22:55
  5. Win 98 stürzt bei Treiberinstallation immer ab
    Von Anuschka im Forum Microsoft Windows
    Antworten: 5
    Letzter Beitrag: 11.01.05, 21:54