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:

Variable Programm erweiterungen...

 
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
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 06.07.2007, 07:11    Titel: Variable Programm erweiterungen... Antworten mit Zitat

Tach,

Ich hatte mir gerade Gedanken darueber gemacht wie man zusaetzliche Aufgabenprogramme in ein laufendes Hauptprogramm implementieren koennte und dachte dabei mit hilfe von FBC eine Exe zu erzeuge und diese in nerhalb eines Threads zu starten..

Kann man diesem zusaetzlich gestarteten Programm vom Hauptprogramm Variablen uebergeben oder vorzeitig beenden/abrechen lassen, falls notwendig ?

Beispiel:
Hauptprogramm
Code:
Declare Sub Thread1 (byval i as integer)
Randomize Timer
Screen 19,32

Dim Th as any ptr
Th=Threadcreate (@Thread1,0)

Dim co as integer
do
    co=int(rnd*&hFFFFFF)
        color co
        ?"Test"
loop until multikey(&h01)
end

Sub Thread1 (byval i as integer)
    Exec ("Thread_exe_test.exe","")
End Sub


Programm-erweiterung:
Thread_exe_test.exe

Code:

randomize Timer
Screen 19,32

Dim co as integer

For l as integer=0 to 1000
    co=int(rnd*&hFFFFFF)
    color co
    ?"kjhdsafkjsdhfkjdh"
next l

end


So laufen beide Programme gleichzeitig... doch die erweiterug laeuft halt auch noch bis zum schluss weiter wenn das Hauptprogramm beendet wurde, nun dachte ich mir das im erweiterungsprogram ein weiterer Thread lauft der wiederum eine Variable vom Hauptprogramm ueberpruefen koennte und somit das Programm bei bedarf abfaengt, weiterhin waere es sinnvoll wenn man vom Erweiterungsprogramm variablen im Hauptprogramm abfragen koennte um dementsprechend eine weitergabe an spezifische Funktionen zu uebergeben...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 06.07.2007, 11:20    Titel: Antworten mit Zitat

Die WinAPI stellt hierfür Funktionen zur Verfügung:

kernel32.dll hat Folgendes geschrieben:
CreateFileMapping
UnmapViewOfFile
MapViewOfFile
CloseHandle



Angewandt wird es folgendermaßen:
Zunächst rufen wir
CreateFileMapping(&hFFFFFFFF,0, 402653188,0,Size,*MapName)) auf. Size ist die maximale Länge der Map, MapName ist ein String der der Map einen Namen gibt.
Von der Funktion bekommen wir eine 0 zurück wenn etwas schiefgegangen ist, ansonsten einen Pointer auf die Map. Auf diesen müssen wir nun viewen: MapViewOfFile(HandleMap, 983071, 0, 0, 0), wobei HandleMap nat. der Wert ist, den wir von CreateFileMapping bekommen haben. Diese Funktion liefert uns einen Pointer eines Views zurück. Von nun an ist das Mapping einsatzbereit.

Im Viewpointer können wir theor. beliebige Speichertransaktionen machen, reinschreiben aber auch lesen. Am besten ein Type anlegen, sodass wir hier nicht die Grenzen überschreiten.

Wenn wir fertig sind, müssen wir zunächst das View mit UnMapViewOfFile(ViewPointer) auflösen und danach auch die Map mit CloseHandle(HandleMap)

Ich hoffe ich konnte es dir so erklären dass es verständlich war, ich habe mir jedenfalls Mühe gegeben happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 06.07.2007, 11:39    Titel: Antworten mit Zitat

irgendwie hab ich das nicht wirklich verstanden... das ganze sieht so aus als wuerde ich mir hier speicher reservieren lassen um dann dort daten hinein zu schreiben...

dann koennte ich doch eigentlich auch die pointer zu den wichtigen variablen die ich benoetige als parameter ans Programm uebergeben und dann im nebenprogramm einfach auslesen, bzw ueberschreiben?
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 06.07.2007, 11:57    Titel: Antworten mit Zitat

Aber da ist nicht sichergestellt das Windows dir dazwischenfunkt.
Zumal so die Komponenten auch später gestartet werden können und kommunizieren können.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 06.07.2007, 12:11    Titel: Antworten mit Zitat

Ja... hab ich gerade gemerkt...

habe ein Programm mit einer Pointeradresse gestartet.. die pointeradresse wird uebergeben, nur liest programm 2 nun was voellig anderes in der adresse als programm 1
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Mao



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

BeitragVerfasst am: 07.07.2007, 19:24    Titel: Antworten mit Zitat

Das geht so nicht (wie du's jetzt probiert hast), da jedes Programm seinen eigenen virtuellen Speicherbereich hat. zwinkern Da müsstest du afaik Segmentregister anders besetzen, wobei du dann wissen wüsstest, welches denn für dein anderes Programm gebraucht wird. zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 07.07.2007, 21:22    Titel: Antworten mit Zitat

Allgemeine Bemerkungen: Normalerweise muss man immer zwischen Proozessen und Threads unterscheiden. Gemeinsam an beiden ist das Sheduling/Kontext-Wechsel bei der CPU sowie Verteilung auf die einzelnen Cores bei Multiprozessor-Systemen. Der Unterschied liegt im Speicherraum: Threads laufen im selben Speicherraum, während bei Prozessen jeder Prozess seinen eigenen virtuellen Speicherraum besitzt. Soweit die Theorie. Falls man auch zwischen Prozessen gemeinsame Variablen benötigt, so muss man auf die Interprozesskommunikation zurückgreifen: Dazu können zwei Prozesse ein gemeinsamer RAM-Bereich (Shared Memory) verwenden. Damit beim Modifizieren von Variablen in diesem Speicher kein Durcheinander durch Unterbruch während der Transaktion entsteht, müssen Variablentransaktionen als kritischer Abschnitt ausgeführt werden, wofür es Locking-Mechanismen mit beispielsweise Semaphoren braucht.

Als alternative Prozesskommunikationsmethode gibt es noch die Pipes. Diese verhalten sich wie Dateien, in denen im Prinzip der eine Prozess mit PRINT# Daten hineinschreiben kann und der andere diese mit INPUT# abholen kann. So wie ich in der FreeBasic-Befehlsreferenz gesehen habe, existiert mit OPEN PIPE genau diese Möglichkeit sogar als Built-In-Befehl, wo der eine Prozess Eure FreeBasic-Applikation ist, der andere ein beliebiger Shell- bzw. CMD.EXE-Befehl.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 07.07.2007, 22:24    Titel: Antworten mit Zitat

Soll heißen, eine Kurzfassung ohne praktischem Beispiel meines ersten Beitrags dieses Threads happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 08.07.2007, 09:27    Titel: Antworten mit Zitat

Jepp, das ganze ist doch ein wenig komplizierter als ich zunaechst dachte, zumal das neu erstellte Programm hinterher auch keine zugriffe auf die SUBs und Functions des Hauptprogramms hat... ich werd mir dafuer wohl noch eine andere moeglichkeit einfallen lassen muessen...
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 08.07.2007, 09:50    Titel: Antworten mit Zitat

Wie schaut's mit DLLs aus?
Obwohl, wäre schwierig, ich weiß nicht ob declare mit variablen klarkommt...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 08.07.2007, 17:23    Titel: Antworten mit Zitat

Mit DLLs sollte es eigentlich gehen.

@PMedia
Wo siehst du ein Problem mit Variabeln?
Man kann z.B. der Sub in der DLL einfach einen Pointer auf die Variabel mitgeben.

Edit:
Oder man reitet das Pferd verkehrt herum zwinkern .
Das Hauptprogramm ist die DLL und die Erweiterung ist eine Exe.
Um das Hauptprogramm unabhängig der Erweiterung zu starten könnte eine Mini Exe dienen die nur eine Sub in der DLL aufruft.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 08.07.2007, 18:09    Titel: Antworten mit Zitat

ich meinte, dass man eine dynamische Anzahl von Plugins laden kann
á la

dim name as string
dim dll as string
declare sub name lib dll alias name (lalalalalalalallaalalalalalalalala)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
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