X-Git-Url: http://nitlanguage.org diff --git a/lib/pnacl.nit b/lib/pnacl.nit index a63e7ca..994bbdb 100644 --- a/lib/pnacl.nit +++ b/lib/pnacl.nit @@ -307,17 +307,14 @@ module pnacl is platform /* This function is called by Nit when using check_dictionary, returns the dictionary at the head of the queue. */ void* NitHandleDictionary() { - while(1) { - struct PP_Var dictionary = DequeueDictionary(); - PnaclApp_handle_dictionary(app, &dictionary); - } + struct PP_Var dictionary = DequeueDictionary(); + PnaclApp_handle_dictionary(app, &dictionary); + return 0; } /* This function is called By Nit when waiting for a user input. */ char* NitHandleMessage() { - while(1) { - return DequeueMessage(); - } + return DequeueMessage(); } /* Entry point */ @@ -637,11 +634,8 @@ class PnaclStream redef fun eof do return end_reached - # write method sends now a message to JS. - redef fun write(s: Text) - do - app.post_message s.to_s - end + # Redefintion of 'write' to send messages to the browser. + redef fun write(s: Text) do app.post_message s.to_s redef fun is_writable: Bool do return true @@ -718,9 +712,37 @@ class PnaclApp # Checks if there is a dictionary in the queue, and if so the dictionary is handled automatically. fun check_dictionary `{ - while(1) { - NitHandleDictionary(); - } + NitHandleDictionary(); `} + + # Infinite loop on check_dictionary + fun run + do + loop + check_dictionary + end + end end + +redef interface Object + # Creates a new thread for Nit. + fun create_thread `{ + pthread_create(&g_nit_thread, NULL, &WrapperNitMain, NULL); + `} + + # Calls 'pthread_exit on current thread. + fun exit_thread(exit_value: Int) `{ + pthread_exit((void*) exit_value); + `} + + # Redef of exit in order to avoid the module to crash by terminating only the Nit thread. + redef fun exit(exit_value: Int) + do + var dictionary = new PepperDictionary + dictionary["exit"] = exit_value + app.post_dictionary dictionary + exit_thread exit_value + end +end + fun app: PnaclApp do return once new PnaclApp