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:

Warten bis Datei da ist und nicht hinein geschrieben wird?
Gehe zu Seite Zurück  1, 2
 
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
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 791
Wohnort: Ruhrpott

BeitragVerfasst am: 04.06.2017, 17:38    Titel: Antworten mit Zitat

Stimmt, /WAIT funktioniert nur solange das Fenster sichtbar ist. Und auch "tasklist" (über OPEN PIPE aufgerufen und periodisch abgefragt) listet nur Prozesse auf, deren Fenster sichtbar sind. Um alle laufenden Prozesse zu überwachen, sind einige Klimmzüge erforderlich:
Code:
#Include "windows.bi"
#Include "win/tlhelp32.bi"

Dim As HANDLE snapshothandle
Dim As PROCESSENTRY32 prozessantwort
Dim As Integer ende

Shell "start /B ""C:\Program Files (x86)\Java\jre1.8.0_121\bin\"" javaw.exe -ea -jar ""G:\javafo.jar"" ""G:\javafo_in.txt"" -p > ""G:\javafo_out.txt"" -w"

Do 'auf ende des prozesses warten
   ende = 1
   snapshothandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) 'handle für systemschnappschuß erstellen
   prozessantwort.dwSize = SizeOf(prozessantwort) 'größe der datenstruktur für antwort übergeben
   Process32First(snapshothandle,@prozessantwort) 'ersten prozesshandle suchen (ist SYSTEM IDLE PROCESS)
   Do While Process32Next(snapshothandle, @prozessantwort) 'alle prozesse durchsuchen
      If prozessantwort.szExeFile = "javaw.exe" Then 'prozess läuft noch
         ende = 0
         Exit Do
      EndIf
   Loop
   CloseHandle(snapshothandle) 'ressourcen freigeben
   Sleep 100
Loop Until ende

CreateToolhelp32Snapshot und alle anderen 32er - Funktionen sollen laut Internet auch mit 64bit funktionieren, wenn das Programm mit 64bit compiliert wurde.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 04.06.2017, 18:44    Titel: Antworten mit Zitat

Ich kenne in diesem Zusammenhang nur die Run-Methode von WSH (Windows Script Host): Dort gibt es extra einen Parameter bWait, den man für das Abwarten vom Ende auf True setzt, dann gibt der Methodenaufruf auch den %ERRORLEVEL% zurück.

Ansonsten würde ich an dieser Stelle einmal
Code:
Dim fh As Integer
Dim z As String
fh = Freefile
Open Pipe "javaw -ea -jar ""G:\javafo.jar"" ""G:\javafo_in.txt"" -p -w" For Input As #fh
While Not Eof(fh)
   Line Input#fh, z
   ' Hier Ausgabe z verarbeiten
Wend
Close fh

ausprobieren.

Nebenbei: Java wird normalerweise immer in %PATH% (Suchweg) eingetragen, womit kein absoluter Pfad eingetragen werden muss, der mit jedem Update der JRE (Java Runtime Environment) wechselt.

Falls das mit dem Suchweg nicht geht, würde ich wenigstens eine Umgebungsvariable wie JAVA_HOME verwenden, die jeweils richtig gesetzt sein muss (geschäftlich habe ich übrigens mit einer ERP-Software zu tun, wo diese Umgebungsvariable gesetzt sein muss).
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 946
Wohnort: Niederbayern

BeitragVerfasst am: 04.06.2017, 20:10    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Stimmt, /WAIT funktioniert nur solange das Fenster sichtbar ist. Und auch "tasklist" (über OPEN PIPE aufgerufen und periodisch abgefragt) listet nur Prozesse auf, deren Fenster sichtbar sind. Um alle laufenden Prozesse zu überwachen, sind einige Klimmzüge erforderlich:
Code:
#Include "windows.bi"
#Include "win/tlhelp32.bi"

Dim As HANDLE snapshothandle
Dim As PROCESSENTRY32 prozessantwort
Dim As Integer ende

Shell "start /B ""C:\Program Files (x86)\Java\jre1.8.0_121\bin\"" javaw.exe -ea -jar ""G:\javafo.jar"" ""G:\javafo_in.txt"" -p > ""G:\javafo_out.txt"" -w"

Do 'auf ende des prozesses warten
   ende = 1
   snapshothandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) 'handle für systemschnappschuß erstellen
   prozessantwort.dwSize = SizeOf(prozessantwort) 'größe der datenstruktur für antwort übergeben
   Process32First(snapshothandle,@prozessantwort) 'ersten prozesshandle suchen (ist SYSTEM IDLE PROCESS)
   Do While Process32Next(snapshothandle, @prozessantwort) 'alle prozesse durchsuchen
      If prozessantwort.szExeFile = "javaw.exe" Then 'prozess läuft noch
         ende = 0
         Exit Do
      EndIf
   Loop
   CloseHandle(snapshothandle) 'ressourcen freigeben
   Sleep 100
Loop Until ende

CreateToolhelp32Snapshot und alle anderen 32er - Funktionen sollen laut Internet auch mit 64bit funktionieren, wenn das Programm mit 64bit compiliert wurde.

Gruß
grindstone
Die Methode funktioniert schon mal.

Zitat:
Nebenbei: Java wird normalerweise immer in %PATH% (Suchweg) eingetragen, womit kein absoluter Pfad eingetragen werden muss, der mit jedem Update der JRE (Java Runtime Environment) wechselt.

Falls das mit dem Suchweg nicht geht, würde ich wenigstens eine Umgebungsvariable wie JAVA_HOME verwenden, die jeweils richtig gesetzt sein muss (geschäftlich habe ich übrigens mit einer ERP-Software zu tun, wo diese Umgebungsvariable gesetzt sein muss).
Das ist das Problem, wenn eine neue Version installiert wird, dass der Pfad nicht mehr stimmt. Mal schauen ob es so funktioniert...

Vielen herzlichen Dank für die Hilfe!

Ein kleiner Test meinerseits der funktioniert:
Code:
ShellExecute(NULL, "open", "javafo.bat", NULL, NULL, SW_HIDE)
     
SLEEP 100 ' ein bisschen warten, bis Prozess eingetragen ist

DO 'auf ende des prozesses warten
   ende = 1
   snapshothandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) 'handle für systemschnappschuß erstellen
   prozessantwort.dwSize = SIZEOF(prozessantwort) 'größe der datenstruktur für antwort übergeben
   Process32First(snapshothandle,@prozessantwort) 'ersten prozesshandle suchen (ist SYSTEM IDLE PROCESS)
   DO WHILE Process32Next(snapshothandle, @prozessantwort) 'alle prozesse durchsuchen
      IF prozessantwort.szExeFile = "javaw.exe" THEN 'prozess läuft noch
         ende = 0
         EXIT DO
      END IF
   LOOP
   CloseHandle(snapshothandle) 'ressourcen freigeben
   SLEEP 100
LOOP UNTIL ende


Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 892
Wohnort: Austria

BeitragVerfasst am: 05.06.2017, 11:21    Titel: Antworten mit Zitat

Wenn ohnehin schon auf die Win32-API zurückgegriffen wird und absolute Pfade verwendet werden könnte man auch gleich CreateProcess anstatt SHELL verwenden. Da erhält man gleich das Process-Handle ohne über alle laufenden Prozesse drüber iterieren zu müssen, was eventuell fehleranfällig ist wenn der Prozess öfters läuft (was bei Java durchaus nicht abwegig wäre).
Ebenso muss man nicht ständig pollen ob der Prozess noch läuft, sondern kann einfach auf sein Ende warten, auf Wunsch sogar mit Timeout:
Code:
WaitForSingleObject(hProcess, INFINITE)

Alternativ zu CreateProcess könnte man übrigens auch ShellExecuteEx verwenden, falls notwendig.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 791
Wohnort: Ruhrpott

BeitragVerfasst am: 06.06.2017, 23:19    Titel: Antworten mit Zitat

Ist nur die Frage, ob WaitForSingleObject nicht auch nur bei sichtbaren Fenstern funktioniert...

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9710
Wohnort: Neben der Festplatte

BeitragVerfasst am: 07.06.2017, 00:06    Titel: Antworten mit Zitat

Da WaitForSingleObject auf das Ende des Prozesses wartet und nicht auf irgendwelche sichtbaren oder gar unsichtbaren Fenster, ist es völlig irrelevant ob der Prozess überhaupt ein Fenster öffnet. Relevant ist nur, wie lange das Prozess-Handle lebendig bleibt. Man kann damit auch auf ganz andere Objekte warten (Threads, Signale, Semaphore, Critical Sections), aber Fenster gehören nicht dazu.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 791
Wohnort: Ruhrpott

BeitragVerfasst am: 07.06.2017, 18:04    Titel: Antworten mit Zitat

Stimmt. Ich hatte beim ersten Versuch dwProcessId statt hProcess als Handle übergeben, daher meine Zweifel. verwundert Aber so geht's:
Code:
#Include "windows.bi"

Dim As STARTUPINFO si
Dim As PROCESS_INFORMATION pi
Dim As String PrgName

PrgName = """C:\Program Files (x86)\Java\jre1.8.0_121\bin\javaw.exe"" -ea -jar ""G:\javafo.jar"" ""G:\javafo_in.txt"" -p > ""G:\javafo_out.txt"" -w"

GetStartupInfo(@si)
si.dwFlags = STARTF_USESHOWWINDOW
si.wShowWindow = SW_HIDE
   
CreateProcess(0,PrgName,0,0,TRUE,CREATE_NEW_CONSOLE,0,0,@si,@pi)

WaitForSingleObject(pi.hProcess, INFINITE)


Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 946
Wohnort: Niederbayern

BeitragVerfasst am: 07.06.2017, 20:55    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Stimmt. Ich hatte beim ersten Versuch dwProcessId statt hProcess als Handle übergeben, daher meine Zweifel. verwundert Aber so geht's:
Code:
#Include "windows.bi"

Dim As STARTUPINFO si
Dim As PROCESS_INFORMATION pi
Dim As String PrgName

PrgName = """C:\Program Files (x86)\Java\jre1.8.0_121\bin\javaw.exe"" -ea -jar ""G:\javafo.jar"" ""G:\javafo_in.txt"" -p > ""G:\javafo_out.txt"" -w"

GetStartupInfo(@si)
si.dwFlags = STARTF_USESHOWWINDOW
si.wShowWindow = SW_HIDE
   
CreateProcess(0,PrgName,0,0,TRUE,CREATE_NEW_CONSOLE,0,0,@si,@pi)

WaitForSingleObject(pi.hProcess, INFINITE)


Gruß
grindstone
Das Beispiel funktioniert bei mir irgendwie nicht? Es wird weder eine Datei geöffnet noch eine Fehlermeldung angezeigt. Ich weiß jetzt nicht, was zu 100% von den Beispielen funktioniert???

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 791
Wohnort: Ruhrpott

BeitragVerfasst am: 08.06.2017, 09:15    Titel: Antworten mit Zitat

Sehr seltsam! Bist du sicher, daß dein Kommandozeilenstring korrekt ist? Hänge an den geposteten Code mal die Zeilen
Code:
Print pi.hProcess
Sleep
an. Wenn das Handle 0 ist, wurde kein Prozess gestartet.

Ansonsten versuche mal, SW_HIDE durch SW_NORMAL zu ersetzen. Dann wird das Fenster des aufgerufenen Prozesses sichtbar.

Ich habe zum Testen diesen kleinen Programmschnippsel benutzt:
Code:
Open ExePath + "\test.bi" For Output As #1
Print #1, Command(1)
Print #1, Command(2)
Print #1, Command(3)
Print #1, Command(4)
Print #1, Command(5)
Print #1, Command(6)
Print #1, Command(7)
Print #1, Command(8)
Print #1, Command(9)
Print #1, Command(10)
Print #1, "OK"
? "OK"

Close

Sleep 5000

Unter dem Namen "t2.bas" in dasselbe Verzeichnis compilieren wie das aufrufende Programm und dann dort die Zeile mit PrgName... in
Code:
PrgName = ExePath + "\t2.exe eins zwei drei vier fünf sechs sieben acht neun zehn"
ändern. War der Test erfolgreich, enthält die neu angelegte Datei "test.bi" alle Kommandozeilenparameter von "eins" bis "zehn".

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 946
Wohnort: Niederbayern

BeitragVerfasst am: 09.06.2017, 01:24    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Sehr seltsam! Bist du sicher, daß dein Kommandozeilenstring korrekt ist? Hänge an den geposteten Code mal die Zeilen
Code:
Print pi.hProcess
Sleep
an. Wenn das Handle 0 ist, wurde kein Prozess gestartet.

Ansonsten versuche mal, SW_HIDE durch SW_NORMAL zu ersetzen. Dann wird das Fenster des aufgerufenen Prozesses sichtbar.

Ich habe zum Testen diesen kleinen Programmschnippsel benutzt:
Code:
Open ExePath + "\test.bi" For Output As #1
Print #1, Command(1)
Print #1, Command(2)
Print #1, Command(3)
Print #1, Command(4)
Print #1, Command(5)
Print #1, Command(6)
Print #1, Command(7)
Print #1, Command(8)
Print #1, Command(9)
Print #1, Command(10)
Print #1, "OK"
? "OK"

Close

Sleep 5000

Unter dem Namen "t2.bas" in dasselbe Verzeichnis compilieren wie das aufrufende Programm und dann dort die Zeile mit PrgName... in
Code:
PrgName = ExePath + "\t2.exe eins zwei drei vier fünf sechs sieben acht neun zehn"
ändern. War der Test erfolgreich, enthält die neu angelegte Datei "test.bi" alle Kommandozeilenparameter von "eins" bis "zehn".

Gruß
grindstone


Code:
012
022
032
042
052
062 12
072 12
092 Swiss System
102
122
132                                                                                           
XXR 7
XXC white1
001    1 mGM  Kasparov, Garry                   2812 RUS     4100018       1963  0.0    1
001    2 mGM  Kramnik, Vladimir                 2811 RUS     4101588       1975  0.0    2
001    3 mIM  Bastian, Herbert                  2299 GER     4601700       1952  0.0    3
001    4 m    Wimmer, Miroslav                  2162 CZE      320854       1958  0.0    4
001    5 m    Lenhard, Martin                   2072 GER     4671759       1976  0.0    5
001    6 m    Barreto Bastidas, Jose Angel      2015 VEN     3904644       1998  0.0    6
001    7 m    Bastian, Holger, Dr.              1798 GER    12940283       1961  0.0    7
001    8 m    Bauer, Erwin                      1499 AUT                   1999  0.0    8
001    9 m    B. Nagy, Roland                   1481 HUN      770949       1999  0.0    9
001   10 m    Barreto, Gabriel Menna            1416 BRA     2162873       1947  0.0   10
001   11 m    Wingard, Viviana                  1349 HUN      763322       2000  0.0   11
001   12 m    Zyznowska, Marianna               1077 POL    21857814       2004  0.0   12


Print pi.hProzess zeigt mir eine Nummer an, aber es wird kein Prozess aufgerufen! SW_NORMAL bringt kein Fenster! Zum Test für euch: obige Zeilen als javafo_in.txt abspeichern und das Programm JaVaFo ausprobieren!

Inhalt der Batchdatei:
Code:
"C:\Program Files (x86)\Java\jre1.8.0_131\bin\javaw.exe" -ea -jar "G:\javafo.jar" "G:\javafo_in.txt" -p > "G:\javafo_out.txt" -w

Pfad entsprechend ändern.

Bei mir klappt das mit eurem Beispiel nicht! Allerdings habe ich es mit folgendem Code zum laufen gebracht:

Code:
ShellExecute(NULL, "open", "javafo.bat", NULL, NULL, SW_HIDE)

' Warten funktioniert nicht?
' WaitForSingleObject(pi.hProcess, INFINITE)

' Trick 17 anwenden!
DO
   IF FILEEXISTS("javafo_out.txt") THEN NAME "javafo_out.txt", "javafo_ou.txt"
   IF FILEEXISTS("javafo_ou.txt") THEN EXIT DO
   SLEEP 10
LOOP

DO
   IF FILEEXISTS("javafo_ou.txt") THEN NAME "javafo_ou.txt", "javafo_out.txt"
   IF FILEEXISTS("javafo_out.txt") THEN EXIT DO
   SLEEP 10
LOOP

_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 791
Wohnort: Ruhrpott

BeitragVerfasst am: 09.06.2017, 21:53    Titel: Antworten mit Zitat

Irgendwie mag Java die CeateProcess - Funktion nicht. Nachdem ich es geschafft habe, die Standardausgabe in eine Datei umzuleiten (die Vererbung von Securityattributen ist wirklich etwas seeeehr schönes mit dem Kopf durch die Mauer wollen ), steht dort drin:
    Error in processing (java.lang.NullPointerException)
    Ask for help to javafo@rrweb.org
Um es mal mit Troubadix zu sagen: "Mein Latein ist nun zuende".

Gruß
grindstone

EDIT:

Und sie bewegt sich doch! (um es mal mit Galilei zu sagen zwinkern ) So funktioniert es (zumindest bei mir, Pfade bitte entsprechend anpassen):
Code:
#Include "windows.bi"

Dim As STARTUPINFO si
Dim As PROCESS_INFORMATION pi
Dim As SECURITY_ATTRIBUTES sa
Dim As HANDLE hOutFile
Dim As String PrgName

'set security attributes
sa.nLength = SizeOf(SECURITY_ATTRIBUTES)
sa.lpSecurityDescriptor = NULL 'use default descriptor
sa.bInheritHandle = TRUE

PrgName = "C:\Programme\Java\jre7\bin\javaw.exe -ea -jar G:\JaVaFo\javafo.jar G:\JaVaFo\javafo_in.txt -p"

hOutFile = CreateFile("G:\JaVaFo\javafo_out.txt", _
                      GENERIC_WRITE, _
                      NULL, _
                      @sa, _
                      CREATE_ALWAYS, _
                      FILE_ATTRIBUTE_NORMAL, _
                      NULL)

GetStartupInfo(@si)
si.dwFlags = STARTF_USESTDHANDLES
si.hStdOutput = hOutFile
   
CreateProcess(0,PrgName,0,0,TRUE,CREATE_NEW_CONSOLE,0,0,@si,@pi)

WaitForSingleObject(pi.hProcess, INFINITE)

CloseHandle(pi.hProcess)
CloseHandle(pi.hThread)
CloseHandle(hOutFile)

_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 946
Wohnort: Niederbayern

BeitragVerfasst am: 09.06.2017, 22:22    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Irgendwie mag Java die CeateProcess - Funktion nicht. Nachdem ich es geschafft habe, die Standardausgabe in eine Datei umzuleiten (die Vererbung von Securityattributen ist wirklich etwas seeeehr schönes mit dem Kopf durch die Mauer wollen ), steht dort drin:
    Error in processing (java.lang.NullPointerException)
    Ask for help to javafo@rrweb.org
Um es mal mit Troubadix zu sagen: "Mein Latein ist nun zuende".

Gruß
grindstone

Bis zu dieser Fehlermeldung kam ich auch schon. Deswegen verwende ich ja diese Batchdatei! Anscheinend geht es anders nicht? Nun gut, ich habe ja jetzt was funktionierendes. Immerhin etwas... happy

Da hätte man glatt einen kleinen Wettbewerb draus machen können! Wer schaffts als erster, das Ding ohne Fenster zum laufen zu bringen?

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 791
Wohnort: Ruhrpott

BeitragVerfasst am: 09.06.2017, 23:47    Titel: Antworten mit Zitat

Die Ursache für den o.g. Fehler habe ich auch gefunden: Ich hatte beim Herumprobieren den Inhalt der Datei javafo_in.txt gelöscht (leere Datei mit 0 Bytes) peinlich . Nachdem ich die Daten wieder hineinkopiert hatte, ging es (siehe EDIT).

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 946
Wohnort: Niederbayern

BeitragVerfasst am: 10.06.2017, 14:48    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Die Ursache für den o.g. Fehler habe ich auch gefunden: Ich hatte beim Herumprobieren den Inhalt der Datei javafo_in.txt gelöscht (leere Datei mit 0 Bytes) peinlich . Nachdem ich die Daten wieder hineinkopiert hatte, ging es (siehe EDIT).

Gruß
grindstone
Das klingt ja interessant! Ich werde es auf jeden Fall mal testen, das Beispiel. Meins funktioniert zwar auch, aber das andere dürfte etwas schneller sein. Wie ist es jetzt mit:

Zitat:
Nebenbei: Java wird normalerweise immer in %PATH% (Suchweg) eingetragen, womit kein absoluter Pfad eingetragen werden muss, der mit jedem Update der JRE (Java Runtime Environment) wechselt.
Im Quellcode will ich den Pfad jetzt nicht grad drin haben wollen.

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 791
Wohnort: Ruhrpott

BeitragVerfasst am: 10.06.2017, 21:54    Titel: Antworten mit Zitat

Wenn der erste Parameter (lpApplicationName) von CreateProcess NULL ist und der Programmname im zweiten Parameter (lpCommandLine) ohne Pfad angegeben wird, so werden (auch) die in %PATH% angegebenen Pfade nach der Programmdatei durchsucht. Mit
Code:
PrgName = "javaw.exe -ea -jar G:\JaVaFo\javafo.jar G:\JaVaFo\javafo_in.txt -p"
läuft das o.g. Beispiel also ebenfalls (siehe auch https://msdn.microsoft.com/en-us/library/ms682425.aspx).

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 946
Wohnort: Niederbayern

BeitragVerfasst am: 03.07.2017, 21:46    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Wenn der erste Parameter (lpApplicationName) von CreateProcess NULL ist und der Programmname im zweiten Parameter (lpCommandLine) ohne Pfad angegeben wird, so werden (auch) die in %PATH% angegebenen Pfade nach der Programmdatei durchsucht. Mit
Code:
PrgName = "javaw.exe -ea -jar G:\JaVaFo\javafo.jar G:\JaVaFo\javafo_in.txt -p"
läuft das o.g. Beispiel also ebenfalls (siehe auch https://msdn.microsoft.com/en-us/library/ms682425.aspx).

Gruß
grindstone

Ich habe das ganze jetzt mal mit 2000 Teilnehmern getestet. Für die Auslosung der 1. Runde brauchte er ca. 10 Minuten!!! Das ist mir etwas zu lang. Aber es funktioniert! Jetzt muss ich nur noch schauen, dass das ganze schneller wird. An JaVaFo liegt es nicht! Am TRF-File auch nicht. An was dann? Werde noch ein paar Test machen...

Edit:
Der Sortieralgorithmus in meinem Programm ist die Bremse! Toll! Ganz toll. mit dem Kopf durch die Mauer wollen

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
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
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
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