Thread Perl Funktion von XS aufrufen
(16 answers)
Opened by Max_Perlbeginner at 2019-01-02 16:28 2019-01-13T18:32:10 Max_Perlbeginner Ich habe zwar keine Erfahrung mit der spezifischen hier verwendeten Kombination von Bibliotheken, aber generell ist es eine schlechte Idee aus mehreren Threads auf ein UI-Toolkit zuzugreifen. Praktisch jedes UI-Toolkit erwartet, dass sämtliche Aufrufe in genau einem nativen Thread stattfinden und einige Toolkits erfordern auch noch, dass es der primordiale Thread sein muss. Die einzigen Ausnahmen die mir dazu einfallen sind AWT (Java) und native Win32-API-Aufrufe. Wenn MPV also irgendwelche Ereigniscallbacks aus zufälligen Threads aufruft, dann solltest Du auf keinen Fall direkt in dem Callback auf die UI-Bibliothek zugreifen. Stattdessen musst Du wohl oder übel das Ereignis von MPV irgendwie verpacken, in eine Warteschlange legen und innerhalb der Tcl/Tk Ereignisschleife auswerten. Außerdem kann es auch sein, dass Aufrufe in den Perlinterpreter von verschiedenen Threads aus ein Problem darstellen. Perl ist alt und hat keine volle Unterstützung für native Threads. Ich bin mir zwar nicht sicher, würde aber erwarten, dass Du innerhalb des Callbacks von MPV aus weder Perl- noch Tcl/Tk-Funktionen sicher aufrufen kannst! Vermutlich wäre die korrekte Lösung also das Callback für MPV in C zu schreiben, Ereignisse von dort in eine Warteschlange zu legen und für Tcl/Tk in C eine neue Ereignisquelle zu bauen, die diese Warteschlange abfragt und dann im Tcl/Tk-Ereignisthread ein Perl-Callback aufruft. When C++ is your hammer, every problem looks like your thumb.
|