[Btx] Open Source BTX Decoder

Stefan Bethke stb at lassitu.de
Tue Jan 29 15:31:12 UTC 2019


Am 23.01.2019 um 22:44 schrieb Michael Steil <mist64 at mac.com>:
> Stefan, Du hast damit Erfahrung? Außerdem weiß ich nicht, wie ich das dann asynchron kriege. Auf Mac hab ich zwei Threads, einer zum Decodieren, der dann beim Lesen aus dem Netz blockt, und einen, der immer mal wieder "dirty" checkt, und wenn nötig, das Bild malt. Wie macht man das im Web?

Ich hab mir den Code mal angeschaut, und das Problem ist offenbar nicht trivial zu lösen. Das Problem sind die synchronen Aufrufe von layer2_getc() in layer6.c. Echtes synchrones I/O geht (bedingt durch den JS-Interpreter) grundsätzlich nicht.

Ich schaue mal, was ich an Alternativen so finden kann. Emscripten unterstützt prinzipiell pthreads, und damit könnte man versuchen, ein synchrones getc() nachzubauen: der Decoder läuft in einem Thread und blockiert, bis der andere Thread ein Zeichen in einen Puffer schreibt. Mir ist noch nicht ganz klar, wie das Speichermodell bei dieser Übersetzung von pthreads zu WebWorker-Threads aussieht.

Die andere Alternative ist der Modus EMTERPRETER, der den Code nicht direkt als JS laufen läßt, sondern Bytecode erzeugt, der dann von einem eigenen Interpreter abgearbeitet wird. Der Interpreter kann unterbrochen/angehalten werden und kann z. B. nach einem sleep() nahtlos weitermachen. Ich habe aber noch nicht rausgefunden, ob es da auch passende Primitive zur Synchronisierung gibt, mit denen man eine solche Input-Queue realisieren kann.

Alternativ müsste man den Decoder komplett auf Event-Driven umbauen, das ist aber sicher nicht ganz so trivial.


Gruß,
Stefan

-- 
Stefan Bethke <stb at lassitu.de>   Fon +49 151 14070811



More information about the Btx mailing list