I see, so about the questions, right now I'm using emscripten_force_exit in
the place where exit is called,
and I hijacked that function to do some finalizing works.
However emscripten_force_exit is not available in JS (after optimized), so
I just set noExitRuntime and call exit() myself.
- Lu
On Tuesday, April 14, 2015 at 3:59:45 PM UTC+8, 王璐 wrote:
>
> I've incorporated the new way into my game. All the
> `while(blocking)sleep(); get_result()` patterns have been replace by
> `EmterpreterAsync.handle(..)`
> I do feel that the program is a bit more responsive.
>
> More issues I've found:
>
> postRun no loner works, is there a standard way to inject functions upon
> exit?
>
> Seems that sometimes `exit` termintates emterpreter, but sometimes it does
> not. Shall I use emscripten_force_exit?
>
>
> Thanks a lot!
>
>
> regards,
> - Lu
>
> On Monday, April 13, 2015 at 7:19:14 PM UTC+8, 王璐 wrote:
>>
>> So now what I understood is, `Emterpreter.handle` should occupy the whole
>> function, or other parts might be execute twice?
>> For example:
>>
>> function f() {
>> do_something();
>> EmterpreterAsync.handle(..);
>> do_something_else();
>> }
>>
>> Then both do_something/do_something_else might be called twice
>> (unexpected).
>>
>> Further, if C code calls a 'nested' EmterpreterAsync.handle, like this
>>
>> func_in_C -> func1_in_js -> ... -> funcN_in_js -> EmterpreterAsync.handle,
>>
>> so everything in the chain will be called twice, as EmterpreterAsync only
>> interprets the C code. Am I right?
>>
>>
>>
>> On Monday, April 13, 2015 at 7:06:00 AM UTC+8, Alon Zakai wrote:
>>>
>>> Yes, and resume occurs in fact before you reach the end of that method,
>>> on the *second* time it is called, when it is restarted. So if you save the
>>> return value somewhere, you can just return it there. But, this is
>>> confusing.
>>>
>>> So we should have a proper API for this. I implemented one in
>>>
>>>
>>> https://github.com/kripken/emscripten/commit/d80417c665dd45e1893cb85aa8523efe57c7d58c
>>>
>>> , see the testcase there. The resume() function has a post argument,
>>> which runs right after the stack was recreated and we are about to finish
>>> the async operation. That means it is right before the async-causing
>>> function exits, so it is a proper time to return a value. I made it so
>>> return values from that post will be returned. Note that you need to return
>>> EmterpreterAsync.handle() for that to work, as in the testcase in that
>>> commit.
>>>
>>> - Alon
>>>
>>>
>>> On Fri, Apr 10, 2015 at 8:37 PM, 王璐 <[email protected]> wrote:
>>>
>>>> Did you mean something like this?
>>>>
>>>> EmterpreterAsync.handle(...);
>>>> return something;
>>>>
>>>>
>>>> But the return value might not be available until the callback, e.g. to
>>>> get a key input, so I need to set the return value in `resume`.
>>>>
>>>>
>>>>
>>>> regards,
>>>> - Lu
>>>>
>>>> On Saturday, April 11, 2015 at 5:07:37 AM UTC+8, Alon Zakai wrote:
>>>>>
>>>>> I think if you add a return in g - outside of the handle() call - it
>>>>> will just be returned. It will however be returned both the first time
>>>>> when
>>>>> called (and starting to unwind the stack) and the second time when
>>>>> restarted (after reconstructing the stack). You could tell which of those
>>>>> you are in using EmterpreterAsync.state. Might be nicer to add an API for
>>>>> that.
>>>>>
>>>>> - Alon
>>>>>
>>>>>
>>>>> On Fri, Apr 10, 2015 at 3:47 AM, Lu Wang <[email protected]> wrote:
>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> Is there a way to return something from an async function with
>>>>>> emterpreter? For example:
>>>>>>
>>>>>> ///main.c
>>>>>> void f() {
>>>>>> printf("%d\n", g());
>>>>>> }
>>>>>>
>>>>>> ///main.js
>>>>>> function g() {
>>>>>> EmterpreterAsync.handle(function(resume) {
>>>>>> setTimeout(function() {
>>>>>> resume(return_value); // ???
>>>>>> }, 1000);
>>>>>> });
>>>>>> }
>>>>>>
>>>>>>
>>>>>> I saw that `resume` already takes a few parameters, so maybe we
>>>>>> cannot simply do so. Currently the closet way is to write the return
>>>>>> value
>>>>>> into some memory address, but it would be better if the return value can
>>>>>> be
>>>>>> passed directly to the C code.
>>>>>>
>>>>>>
>>>>>> regards,
>>>>>> - Lu
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "emscripten-discuss" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "emscripten-discuss" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
--
You received this message because you are subscribed to the Google Groups
"emscripten-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.