1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
/*
* Copyright 2020 The Emscripten Authors. All rights reserved.
* Emscripten is available under two separate licenses, the MIT license and the
* University of Illinois/NCSA Open Source License. Both these licenses can be
* found in the LICENSE file.
*/
#include <stdio.h>
#include <assert.h>
#include <emscripten.h>
#include <emscripten/threading.h>
int state = 0;
void increment() {
state++;
}
void finish() {
assert(state == 2);
emscripten_force_exit(0);
}
int main() {
assert(state == 0);
// This dispatch_to_thread call will be synchronous since we are on the right
// thread already.
int called_now = emscripten_dispatch_to_thread(emscripten_main_browser_thread_id(), EM_FUNC_SIG_V, &increment, 0);
assert(called_now);
assert(state == 1);
// This async call will actually be async.
emscripten_dispatch_to_thread_async(emscripten_main_browser_thread_id(), EM_FUNC_SIG_V, &increment, 0);
assert(state == 1);
emscripten_dispatch_to_thread_async(emscripten_main_browser_thread_id(), EM_FUNC_SIG_V, &finish, 0);
emscripten_exit_with_live_runtime();
__builtin_trap();
}
|