I think I see the issue - when you tell it to implement an infinite loop,
you can never get to the rest of main() - we actually stop main at that
point (since as an infinite loop, the rest is not reachable). However, we
do still let you cancel the main loop (which is just a JS event that keeps
happening), which stops running without continuing in main. Perhaps that
could be a little clearer in the docs.

In any case, if you want code to run after the main loop ends, you can
perhaps put it in a function and call it right after canceling the main
loop.


On Sun, Aug 26, 2018 at 11:23 AM sigflup synasloble <[email protected]>
wrote:

>
> #include <stdio.h>
> #include <stdlib.h>
>
> #include <string.h>
> #include <SDL/SDL.h>
> #include <emscripten.h>
>
>
> SDL_Surface *screen;
>
>
> void renderloop(void) {
>  SDL_Event event;
>  SDL_Rect dst;
>   SDL_LockSurface(screen);
>
>   for(int n=0;n<1000;n++) {
>     int x=random()%800;
>     int y=random()%600;
>     int pixel=random()*100000;
>     int bpp = screen->format->BytesPerPixel;
>     Uint8 *p = (Uint8 *)screen->pixels + y * screen->pitch + x * bpp;
>     if((x>screen->w)||(y>screen->h)||(x<0)||(y<0)) return;
>     *(Uint32 *)p = pixel;
>   }
>
>   SDL_UnlockSurface(screen);
>
>
>   SDL_UpdateRect(screen, 0,0,0,0);
>
>   while(SDL_PollEvent(&event))
>    if(event.type==SDL_KEYDOWN) emscripten_cancel_main_loop();
>
> }
>
>
>
>
> int main(int argc, char *argv[]) {
>
>
>   SDL_Init(SDL_INIT_VIDEO);
>
>   screen=SDL_SetVideoMode(800,600,32,SDL_ANYFORMAT);
>
>   printf("in loop\n");
>   emscripten_set_main_loop(renderloop,0,1);
>   printf("out loop\n");
>   return 0;
> }
>
> ok, you run it and press any key to exit the loop. When the loop stops it
> doesn't call "printf("out loop\n");" :(
>
> On Sunday, August 26, 2018 at 12:59:49 PM UTC-5, Alon Zakai wrote:
>>
>> I don't think that should matter (it just affects what happens in the
>> initial call to set the main loop). But let us know if you find a testcase
>> showing that, perhaps there's a bug.
>>
>> On Sun, Aug 26, 2018 at 8:15 AM sigflup synasloble <[email protected]>
>> wrote:
>>
>>> Maybe it's because I have the simulate infinite loop argument on
>>>
>>>
>>> On Sunday, August 26, 2018 at 8:49:00 AM UTC-5, Alon Zakai wrote:
>>>>
>>>> This should work, and looks like we have a passing test for it,
>>>> browser.test_emscripten_main_loop, so I think there might be something more
>>>> going on in your application. Can you provide a testcase showing the issue?
>>>>
>>>> On Fri, Aug 24, 2018 at 5:36 PM sigflup synasloble <[email protected]>
>>>> wrote:
>>>>
>>>>> I want to exit main loop by calling cancel_main_loop inside of the
>>>>> loop.
>>>>>
>>>>> When I do this my program hangs :(
>>>>>
>>>>> --
>>>>> 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.
>

-- 
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.

Reply via email to