te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>emscripten - "Assertion failed: you need to wait for the runtime to be ready" Error when calling a C function
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

emscripten - "Assertion failed: you need to wait for the runtime to be ready" Error when calling a C function

programmeradmin3浏览0评论

I am trying out a simple example to call a C function piled to .wasm with JavaScript.

This is the counter.c file:

#include <emscripten.h>

int counter = 100;

EMSCRIPTEN_KEEPALIVE
int count() {  
    counter += 1;
    return counter;
}

I piled it using emcc counter.c -s WASM=1 -o counter.js.

My main.js JavaScript file:

const count = Module.cwrap('count ', 'number');
console.log(count());

My index.html file only loads both .js files in the body, nothing else:

<script type="text/javascript" src="counter.js"></script>
<script type="text/javascript" src="main.js"></script>

The error I am getting is:

Uncaught abort("Assertion failed: you need to wait for the runtime to be ready (e.g. wait for main() to be called)") at Error

when I try to call count() in main.js. How can I wait for the runtime to be ready?

I am trying out a simple example to call a C function piled to .wasm with JavaScript.

This is the counter.c file:

#include <emscripten.h>

int counter = 100;

EMSCRIPTEN_KEEPALIVE
int count() {  
    counter += 1;
    return counter;
}

I piled it using emcc counter.c -s WASM=1 -o counter.js.

My main.js JavaScript file:

const count = Module.cwrap('count ', 'number');
console.log(count());

My index.html file only loads both .js files in the body, nothing else:

<script type="text/javascript" src="counter.js"></script>
<script type="text/javascript" src="main.js"></script>

The error I am getting is:

Uncaught abort("Assertion failed: you need to wait for the runtime to be ready (e.g. wait for main() to be called)") at Error

when I try to call count() in main.js. How can I wait for the runtime to be ready?

Share Improve this question asked Sep 20, 2017 at 21:40 Kilian ObermeierKilian Obermeier 7,1684 gold badges40 silver badges52 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 12

I found a quick solution. I needed to modify main.js to:

Module['onRuntimeInitialized'] = onRuntimeInitialized;
const count = Module.cwrap('count ', 'number');

function onRuntimeInitialized() {
    console.log(count());
}

This alters the Module object that is defined in the counter.js script generated by emscripten.

The other answer works, as specified here under the "How can I tell when the page is fully loaded and it is safe to call piled functions?" header, where the article also mentions another way to wait to call code where you include a main function in your C/C++ code that calls a javascript function through the C/C++ to Javascript API like so:

#include <emscripten.h>
int main() {
    EM_ASM(const count = Module.cwrap('count ', 'number'); console.log(count()););
    return 0;
}

This works because the main function always executes when the runtime is initialized.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论