Aktuelle Zeit: 24.08.2019 00:51

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Variable an einen Thread übergeben und wenn fertig abfragen
BeitragVerfasst: 12.07.2019 19:18 
Offline

Registriert: 26.04.2019 10:31
Wohnort: Mühldorf am Inn
Hallo,
ich habe eine Stringliste (mehrere Videodateien) die ich an einen Thread zur Bearbeitung übergeben möchte.
Innerhalb der Threadprozedur arbeitet ffmpeg, der die Datei in ein anderes Format umwandelt, was natürlich eine Weile dauert.
Die Umwandlung innerhalb meiner Thread Routine arbeitet soweit korrekt, die zu bearbeitende Datei ist aber im Thread definiert, das geht so überhaupt net... Ich schaff es nicht vom Hauptprogramm einen String an die Thread Routine zu übergeben.
Ausserdem soll mir die Threadprozedur mit einer Variable (UmwOK) mitteilen, dass die Umwandlung abgeschlossen ist, damit ich weiss dass ich die nächste Datei übergeben kann. Die Threadprozedur würde ich innerhalb der Hauptschleife mit Hilfe eines Timers kontinuierlich abfragen.
In einem weiteren Ausbau plane ich noch das Ausgabeformat zu übergeben, aber das wär dann nimmer schwierig, wenn ich das Hauptproblem gelöst hätte.
Wie muss ich das angehen?

Dank im Voraus
Kurt

_________________
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Variable an einen Thread übergeben und wenn fertig abfra
BeitragVerfasst: 12.07.2019 19:44 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Entweder ein Event (für Wait/WindowEvent) vom Thread senden sobald dieser fertig ist
(um den nächsten Thread zu starten) oder eine Variable/Struktur (auch kontinuierlich)
abfragen die dann mit Lock/UnlockMutex gesichert sein sollte.
Über so einer abgesicherte Variable/Struktur können dann auch neue Befehle
usw. übergeben werden.

_________________

Links:
PureBasic Discord
[ENGINE] 2D Engine Nautilus (Win)
[INCLUDE] GLFW 3.3 Library
[MODULE] Bass Library 2.4 (Win)
[LIBRARY] Hexi Binary2Hex (Win)



Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Variable an einen Thread übergeben und wenn fertig abfra
BeitragVerfasst: 12.07.2019 20:20 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Sommertv hat geschrieben:
Die Umwandlung innerhalb meiner Thread Routine arbeitet soweit korrekt, die zu bearbeitende Datei ist aber im Thread definiert, das geht so überhaupt net... Ich schaff es nicht vom Hauptprogramm einen String an die Thread Routine zu übergeben.Ausserdem soll mir die Threadprozedur mit einer Variable (UmwOK) mitteilen, dass die Umwandlung abgeschlossen ist, damit ich weiss dass ich die nächste Datei übergeben kann.

Dafür sind Semaphore da:
CreateSemaphore(), SignalSemaphore(), TrySemaphore() und WaitSemaphore().
Genauer gesagt brauchst du zwei davon.
Das eine Semaphore wartet (Wait) im Thread auf ein Signal, ob eine neue Datei (String) gelesen werden darf.
Nach der Bearbeitung sendet (Signal) der Thread selbst ein Signal eines anderen Semaphore das er fertig ist.
Im Hauptprogramm prüftst (Try) du dann ob es ein Signal vom Thread gab und arbeitest weiter.

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Variable an einen Thread übergeben und wenn fertig abfra
BeitragVerfasst: 12.07.2019 20:38 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Eigentlich benutzt man für das, wovon Stargate redet, sogar Condition Variables, leider gibt es die in PB nicht.

_________________
Freakscorner.de - Der Bastelkeller | Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 18.04.1 LTS x64, PureBasic 5.60 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Variable an einen Thread übergeben und wenn fertig abfra
BeitragVerfasst: 12.07.2019 23:04 
Offline

Registriert: 26.04.2019 10:31
Wohnort: Mühldorf am Inn
Danke... das hat mir schon sehr viel weiter geholfen. Ich hab jetzt in etwa folgenden Code, aber der funktioniert noch nicht korrekt, heisst ich kann zwar damit einen String an den Thread übergeben, aber der Rückgabewert im OkFlag ist immer 0.
Wo kann der Fehler liegen?
Code:
Structure VideoConvert
FileName$
EndFlag$
EndStructure

Procedure MyThread(*Parameters.VideoConvert)
    Define *OkFlag
    *OkFlag = AllocateMemory(1) 
    Debug *Parameters\FileName$
    Debug *Parameters\EndFlag$

; hier der Aufruf von ffmpeg mit RunProgram...

    ClearStructure(*Parameters, VideoConvert)
    FreeMemory(*Parameters)
    PokeI (*OkFlag,1) 
  EndProcedure

  *Parameters.VideoConvert = AllocateMemory(SizeOf(VideoConvert))
  *Parameters\FileName$ = "blablabla.mov"
  *Parameters\EndFlag$ = "0"
 
  Delay(2000)
 
Debug "OkFlag= " + *OkFlag
Repeat
  Delay(1)
ForEver

_________________
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Variable an einen Thread übergeben und wenn fertig abfra
BeitragVerfasst: 13.07.2019 07:46 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
*OkFlag ist eine lokale Variable der Procedure und außerhalb nicht sichtbar. Wäre auch schlecht da sie nicht mit Mutex o.d.g. gesichert ist.

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Variable an einen Thread übergeben und wenn fertig abfra
BeitragVerfasst: 13.07.2019 08:45 
Offline

Registriert: 26.04.2019 10:31
Wohnort: Mühldorf am Inn
Guten Morgen,
ok... das leuchtet mir ein, iss mein Fehler...
Wie kann ich dann einen Rückgabestring an EndFlag$ übergeben?
Code:
PokeS(*Parameters\EndFlag$,"fertig",10, #PB_Ascii)

funktioniert nicht, da bekomme ich die Meldung Bad Parameter Type...

_________________
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Variable an einen Thread übergeben und wenn fertig abfra
BeitragVerfasst: 13.07.2019 09:52 
Offline
Benutzeravatar

Registriert: 22.02.2008 20:49
Wohnort: Utah, USA
Sommertv hat geschrieben:
Guten Morgen,
ok... das leuchtet mir ein, iss mein Fehler...
Wie kann ich dann einen Rückgabestring an EndFlag$ übergeben?
Code:
PokeS(*Parameters\EndFlag$,"fertig",10, #PB_Ascii)

funktioniert nicht, da bekomme ich die Meldung Bad Parameter Type...

Code:
*Parameters\EndFlag$ = "fertig"

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Variable an einen Thread übergeben und wenn fertig abfra
BeitragVerfasst: 13.07.2019 10:40 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
So geht es recht einfach...

Ich habe es mal zu einen Mini-Thread-Control umgebaut

Link: Mini Thread Control

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Variable an einen Thread übergeben und wenn fertig abfra
BeitragVerfasst: 13.07.2019 21:54 
Offline

Registriert: 26.04.2019 10:31
Wohnort: Mühldorf am Inn
Danke schön,
das ist ein schönes ausbaufähiges Beispiel...

Schöne Grüsse
Kurt

_________________
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye