emscriptenを使用して、私が書いたJavaScriptライブラリを利用するCプログラムをコンパイルしており、それらを--js-library
フラグと一緒にリンクしています。私のCコードは、ライブラリにPromise
を持つ関数を呼び出し、コールバックではCの呼び出し元からJS関数に渡されたメモリに与えられた結果を書きたいと思っています。約束なしCコードからの非同期のjavascriptライブラリ呼び出しが遅すぎる
lib.js他の機能において
mergeInto(LibraryManager.library, {
compute_js: function(input, out_buf) {
do_promise_computation(
input
).then(function(result){
Module.print("Promise Returned fully");
for (var i = 0; i < 8; i++) {
var num = result[i]
{{{makeSetValue('out_buf+(i*4)', 0, 'num', 'i32')}}}
}
});
}
program.cを
#include <stdio.h>
#include <stdint.h>
#include <emscripten.h>
extern void compute_js(int32_t, int64_t*);
int main() {
int32_t input = 1234;
int64_t out_buf[4];
int64_t* out_ptr = (int64_t*)(&out_buf);
printf("Calling Javascript\n");
compute_js(input, out_ptr);
printf("%lld\n", out_buf[0]);
printf("%lld\n", out_buf[1]);
}
、:ここでの例では、(私は簡潔にするために約束の誤差を引くcatch
一部省略)であります私がライブラリのために書いたことで、私はCコードから与えられたバッファにデータを書き込むことができましたが、今度は次のように出力されます:
Calling Javascript
0
0
Promise Returned fully
しかし、私はプロミスからの結果を待ってから、Cコードに書き込んで、がJavaScriptコールの後のCコードのprintf
の前に来るようにしたいと思っています。 emscriptenでこれを行う方法はありますか?
私はemscriptenとあまり慣れていないよ、私は怖いが、あなたはセマフォを使用できるかどうか尋ねている私の友人は、それはあなたの問題を解決する必要があります。 –
この環境はわかりませんが、JavascriptでCコードの '.then()'ハンドラからコールバック関数を呼び出せますか? – jfriend00