Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Programm Neustart

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ich eben



Anmeldungsdatum: 05.12.2008
Beiträge: 12
Wohnort: zu Hause

BeitragVerfasst am: 07.12.2008, 18:03    Titel: Programm Neustart Antworten mit Zitat

Hallo,
Ich habe mich schon ein bisschen in Q-Basic versucht und ein Programm geschrieben, das Gleichungssysteme löst.
Am Ende einer Rechnung wird gefragt, ob man noch einmal rechnen will.
Das habe ich dann mit dem Befehl RUN gemacht(um das Programm neu zu starten).
Code:
 
Again1:
   PRINT
   PRINT
   INPUT "Wollen Sie noch einmal rechnen (J oder N)"; Ans$
   IF Ans$ = "J" OR Ans$ = "j" THEN
      RUN
   END IF
   IF Ans$ = "N" OR Ans$ = "n" THEN
      END
   ELSE
      END
   END IF

Jetzt will ich mit FreeBasic eine 32-bit-exe erstellen und bekomme dann folgende Meldung im Ausgabefenster:
Zitat:

.../QBASIC/FBIde/GLEICHUNG.bas (24) error 1: Argument count mismatch
RUN
^

Gibt es da einen anderen Befehl, das Programm Neu zu starten in FB??
Ich freue mich auf eure Beiträge.
MfG ich eben
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 07.12.2008, 18:15    Titel: Antworten mit Zitat

Hallo,

QBasic ist eine andere Programmiersprache als FreeBASIC und die Programme, die man zur Nutzung dieser Programmiersprachen braucht, sind unterschiedlich. FBIDE (geht aus deiner Fehlermeldung hervor) ist eine Entwicklungsumgebung für FreeBASIC, nicht für QBasic.

Auf GOTO sollte sowohl in QBasic als auch in FreeBASIC verzichtet werden. Besser ist eine Ersatzkonstruktion z.B. mit DO... LOOP:
Code:
DIM n AS STRING, auswahl AS STRING
DO
  CLS
  INPUT "Gib deinen Namen ein: ", n
  PRINT "Hallo, "; n
  DO
     INPUT "Nochmal (j/n)? ", auswahl
     SELECT CASE UCASE(auswahl) 'UCASE(...) wandelt die übergebene Zeichenkette in Großbuchstaben um, sodass es egal ist, ob der User J oder j eingibt
     CASE "J": EXIT DO
     CASE "N": END
     CASE ELSE: PRINT "Ungueltige Eingabe. Nochmal eingeben!"
     END SELECT
  LOOP
LOOP

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
max06



Anmeldungsdatum: 05.12.2004
Beiträge: 390
Wohnort: Augsburg

BeitragVerfasst am: 08.12.2008, 02:26    Titel: Antworten mit Zitat

Ich habe genau das selbe Problem und will dafür nicht extra nen eigenen Thread öffnen...

Wie kann ich ein FB-Programm dazu bewegen, sich selbst zu beenden und direkt im Anschluss wieder zu starten? (Muss nur für Linux laufen)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Lutz Ifer
Grillmeister


Anmeldungsdatum: 23.09.2005
Beiträge: 555

BeitragVerfasst am: 08.12.2008, 14:04    Titel: Antworten mit Zitat

Code:
shell "programm&disown": end


die zweite instanz startet dann allerdings ganz kurz bevor die erste instanz sich beendet.
_________________
Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 08.12.2008, 14:10    Titel: Antworten mit Zitat

Wenn sich das Programm aber definitiv beenden soll, bevor es nochmal geöffnet wird, könnte man das über ein zweites Programm machen, das vom ersten gestartet wird, kurz wartet und dann wieder das erste Programm startet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
max06



Anmeldungsdatum: 05.12.2004
Beiträge: 390
Wohnort: Augsburg

BeitragVerfasst am: 08.12.2008, 17:16    Titel: Antworten mit Zitat

So einfach isses dann leider doch nich...

ich habe ein Konsolen-Programm, welchem irgendwann im Ablauf gesagt wird, es soll neugestartet werden.

Dieses Programm hat ne Menge Bildschirmausgaben, welche nicht so einfach untertauchen sollten. Das Programm muss auf den Befehl hin beendet werden und erst danach darf es wieder gestartet werden. Allerdings zwingend so, dass wieder Bildschirmausgaben zu sehen sind.

Möglich?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 08.12.2008, 17:51    Titel: Antworten mit Zitat

Naja, wenn ein Programm beendet wird, dann geht alles im Speicher mit unter. Mir würde da nichts einfallen, außer den Bildschirminhalt irgendwo zwischenzuspeichern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frebas



Anmeldungsdatum: 20.06.2008
Beiträge: 245

BeitragVerfasst am: 08.12.2008, 19:39    Titel: Antworten mit Zitat

Du könntest die Werte in einer Datei speichern. Aber wenn du alle speicherst macht das neustarten keinen sinn.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 08.12.2008, 22:36    Titel: Antworten mit Zitat

Dann würd ich mit SCREEN den Bildschirminhalt auslesen, irgendwo nach /tmp zwischenspeichern und beim Neustarten einfach 'nen Switch mit übergeben, der dem Programm sagt, dass es doch bitte mal den Bildschirminhalt aus der Datei übernehmen soll.
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
max06



Anmeldungsdatum: 05.12.2004
Beiträge: 390
Wohnort: Augsburg

BeitragVerfasst am: 09.12.2008, 02:06    Titel: Antworten mit Zitat

Hm, ich hab mich undeutlich ausgedrückt...

Ich meinte, die Ausgaben des neugestarteten Programmes sollten nicht im Hintergrund verschwinden. Das Programm läuft rund um die Uhr und muss nur bei eventuellen Änderungen neu gestartet werden. Wenn ich per "shell" ein Programm starte, landet es im Hintergrund -> ich hab keine Ausgaben mehr. Die Ausgaben vom ersten Programm sind mir egal.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.12.2008, 13:21    Titel: Antworten mit Zitat

Was änderst du denn zur laufzeit? Wenn es nicht direkt die ausführbare Datei ist, dann versuchs mal auf diese Weise:
Code:


dim beenden as string

do
 scope
  dim text as string
  text = "Hallo Welt!"
  print text
 end scope
 input "Beenden?" , beenden
loop until beenden = "j"

Das soll nur ein beispiel sein, wie man sein Programm gestalten kann, dass es von sich aus im prinzip "komplett" neustarten kann. Alles was im "scope-bereich" geschieht, bleibt auch im scope-bereich zwinkern

Wenn du allerdings das Programm an-sich austauschen möchtest, dann empfehle ich dir ein script um das Programm drum rum zu stricken! Unter linux ist das einfach mit einem bash-script. Unter windows nicht so schick per batch-datei.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 09.12.2008, 14:02    Titel: Antworten mit Zitat

Hi,
einfach RUN "Programmname":
Code:
Screen 18
Dim a As Integer
Print " da bin ich..."
Input "0 = Ende, sonst Neustart";a
If a<>0 Then
  Dim s As String = __FILE__
  Mid( s,Len(s)-2,3) = "exe"
  Print "Starte neu.."
  Sleep 1000,1
  Run s
End If
Print "Ende..."
Sleep 1000,1
End
"Screen 18" habe ich nur testweise angegeben, kann bei Konsolemodus natürlich entfallen.
Code:
Dim s As String = __FILE__
Mid( s,Len(s)-2,3) = "exe"
ist nur die automatische Namenswandlung "Test.bas" => "Test.exe"

EDIT/
Austausch des Programms wird so nicht möglich sein, das würde einen kurzen Zeitraum erfordern in dem das Programm nicht benutzt wird (Windows meckert sonst).
Dazu müsste man ein weiteres Programm aufrufen, welches den Austausch macht und dann das Programm wieder aufruft.
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.


Zuletzt bearbeitet von volta am 09.12.2008, 14:22, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
max06



Anmeldungsdatum: 05.12.2004
Beiträge: 390
Wohnort: Augsburg

BeitragVerfasst am: 09.12.2008, 14:03    Titel: Antworten mit Zitat

Das Programm muss nur neugestartet werden, wenn der Kern an sich verändert wurde. Sprich, das Programm an sich wird ausgetauscht.

Batch-Script klingt ganz gut, leider bin ich Neuling im Bereich der batch-Programmierung.

Ich habe die Möglichkeit, das Programm mit einem anderen Error-level zu beenden, eventuell hilft das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.12.2008, 14:17    Titel: Antworten mit Zitat

Mit Error-level hab ich so meine schwierigkeiten. Aus dem Stehgreif weiss ich nie welcher level zu welchem ergebnis führt.
Generell würden dauerschleifen z.B. unter windows/dos etwa so ausschauen:

[start.bat]

Code:

@echo off
:anfang
program.exe
goto anfang


unter linux:

[start.sh]
Code:

#!/bin/bash

while [ "A" = "A" ]; do
 ./program
done


wobei im linux-beispiel die bedingung der while schleife "A" = "A" natürlich an die eigenen bedürfnisse angepasst werden sollte. Hab sie einfach nur als platzhalter reingeschrieben.

Bei beiden beispielen sollte die ausführbare datei im selben verzeichnis stehen wie die script-datei.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
max06



Anmeldungsdatum: 05.12.2004
Beiträge: 390
Wohnort: Augsburg

BeitragVerfasst am: 09.12.2008, 16:08    Titel: Antworten mit Zitat

Das mit dem Script ist akzeptabel.

Nur wäre das klasse, wenn das Script nur bei bestimmten Bedingungen neustarten würde, nämlich dann, wenn ich den Neustart angefordert habe.

Wenn ich in dem Script irgendwie den Errorlevel abfragen könnte, müsste das lösbar sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 09.12.2008, 17:00    Titel: Antworten mit Zitat

Wie das mit den error-level unter win/dos funktioniert kann ich dir auf anhieb nicht genau sagen. Ich könnt mir denken das es ähnlich ist wie unter linux:

[start.sh]

Code:

#!/bin/bash

while ./program ; do
done


Dabei läuft die schleife solange wie das programm ohne fehler beendet wurde. Zumindest so ähnlich sollte es ausschauen, hab leider grad keinen linux-rechner zum testen da.

Ich denke da musst du dich einfach mal in batch / bash reinlesen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
max06



Anmeldungsdatum: 05.12.2004
Beiträge: 390
Wohnort: Augsburg

BeitragVerfasst am: 09.12.2008, 18:03    Titel: Antworten mit Zitat

Das ganze muss nur unter Linux laufen.

jo, werde mich mal mit der shell-programmierung auseinander setzen... lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz