欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何集成AWTK到iotjs

本篇文章為大家展示了如何集成AWTK到iotjs,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、周口網(wǎng)絡(luò)推廣、小程序開發(fā)、周口網(wǎng)絡(luò)營銷、周口企業(yè)策劃、周口品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供周口建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.chinadenli.net

集成 AWTK 到 iotjs

iotjs 是三星開源的 javascript 物聯(lián)網(wǎng)開發(fā)平臺。它為 javascript 應(yīng)用程序提供了訪問硬件、網(wǎng)絡(luò)、文件系統(tǒng)和異步化的能力,功能類似于 nodejs,但無論是代碼體積還是內(nèi)存需求,iotjs 都要小很多,是用 javascript 開發(fā) iot 設(shè)備應(yīng)用程序的首選。

AWTK 全稱 Toolkit AnyWhere,是 ZLG 開發(fā)的開源 GUI 引擎,旨在為嵌入式系統(tǒng)、WEB、各種小程序、手機(jī)和 PC 打造的通用 GUI 引擎,為用戶提供一個(gè)功能強(qiáng)大、高效可靠、簡單易用、可輕松做出炫酷效果的 GUI 引擎。

用 C 語言來擴(kuò)展 iotjs 不是太難的事情,但是將 GUI 集成到 iotjs 卻是有些麻煩的。主要原因在于 iotjs 有個(gè)主循環(huán) (main loop),GUI 自己也有個(gè)主循環(huán) (main loop),兩者不同并存,只能選一個(gè)。這里 AWTK 為例,介紹一下如何將 GUI 集成到 iotjs 中,這對將 GUI 集成到 nodejs 也是有參考價(jià)值。

一、以誰為主

在集成 AWTK 到 iotjs 時(shí),我選擇了以 iotjs 的主循環(huán)為主。這并不是唯一的正確方案,做這個(gè)選擇的主要原因有:

  • 讓 AWTK 作為 iotjs 的模塊,保持 iotjs 本身的開發(fā)方式。

  • 避免修改 iotjs。iotjs 對我來說是第三方模塊,修改第三方模塊,會增加后期的維護(hù)成本。

我們把 AWTK 主循環(huán)的一次循環(huán)提取成一個(gè) step,然后把它放到 iotjs 的定時(shí)器中,每隔 16 毫秒(最大 60FPS) 調(diào)用一次,這樣可以模擬 GUI 的主循環(huán)了。

const char* s_step_script = "\
(function() { \
  var awtkStepId = 0;\
  function awtkStep() {\
    if(!awtk_main_loop_step()) {\
      clearInterval(awtkStepId);\
      console.log(\"awtk quit\");\
      awtkStepId = 0;\
    }\
  }\
  awtkStepId = setInterval(awtkStep, 16);\
}())";

JS_FUNCTION(wrap_awtk_main_loop_step) {
  bool_t ret = FALSE;
  main_loop_t* loop = main_loop();

  if(loop != NULL) {
    main_loop_step(loop);

    ret = !(loop->app_quited);
    if(loop->app_quited) {
      tk_exit();
    }
  }

  return jerry_create_number(ret);
}

值得注意的是,這個(gè)定時(shí)器一定要放在 javascript 里去調(diào)用。 開始我用了 libuv 原生的定時(shí)器來實(shí)現(xiàn),代碼簡潔而且高效,但是應(yīng)用程序退出時(shí),iotjs 就會崩掉,原因是 iotjs 認(rèn)為所有的定時(shí)器都是 javascript 里的,而 javascripte 里的定時(shí)器是在原生定時(shí)器基礎(chǔ)上包裝而成,在應(yīng)用程序退出時(shí)做了一些額外的釋放工作。

二、模態(tài)對話框

模態(tài)對話框會再次調(diào)用主循環(huán)的 run,直到對話框關(guān)閉。這個(gè)時(shí)候需要在 GUI 主循環(huán)中調(diào)用 iotjs 的主循環(huán)。但是 iotjs 的循環(huán)是 libuv 主循環(huán)的基礎(chǔ)上包裝了一層,而且不適合外面再次調(diào)用,所以我仿造 iotjs 實(shí)現(xiàn)了一個(gè):

static ret_t  main_loop_iotjs_run(main_loop_t* loop) {
  ret_t ret = RET_OK;
  iotjs_environment_t* env = iotjs_environment_get();

  if (!iotjs_environment_is_exiting(env)) {
    bool more = 0;
    do {
      more = uv_run(iotjs_environment_loop(env), UV_RUN_ONCE);
      more |= iotjs_process_next_tick();

      jerry_value_t ret_val = jerry_run_all_enqueued_jobs();
      if (jerry_value_is_error(ret_val)) {
        ret_val = jerry_get_value_from_error(ret_val, true);
        iotjs_uncaught_exception(ret_val);
        jerry_release_value(ret_val);
      }

      if (more == false) {
        more = uv_loop_alive(iotjs_environment_loop(env));
      }

      if(!(loop->running)) {
        break;
      }
    } while (more && !iotjs_environment_is_exiting(env));
  }

  return ret;

!(loop->running) 表示模態(tài)對話框已經(jīng)退出,可以回調(diào)上一級主循環(huán)了。

三、GUI 需要提供 Jerryscript 的綁定

要將 GUI 集成到 iotjs,GUI 必須要把對外提供的 AIP 全部綁定到 jerryscript。這個(gè)對 AWTK 來說只是舉手之勞的事情,AWTK 通過提取注釋來生成 IDL,再根據(jù) IDL 來生成各種語言的綁定,這讓綁定工作變得輕松,同時(shí)也降低了后期的維護(hù)成本。

AWTK-JS 這個(gè)項(xiàng)目提供了對 jerryscript 的綁定,我們把它編譯成一個(gè)庫,即可在 AWTK-iotjs 中使用了。

static int gui_app_start(int32_t lcd_w, int32_t lcd_h) {
  tk_init(lcd_w, lcd_h, APP_SIMULATOR, NULL, APP_ASSETS_ROOT);

  assets_init();
  awtk_js_init();
  main_loop()->running = TRUE;
  awtk_jerryscript_eval(AWTK_JS_FILE);

  tk_main_loop_run();

  return 0;
}

在啟動 GUI 時(shí),調(diào)用 awtk_js_init 初始化 AWTK 的 jerryscript 綁定,調(diào)用 awtk_jerryscript_eval 預(yù)先加載 awtk.js 文件。

上述內(nèi)容就是如何集成AWTK到iotjs,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享文章:如何集成AWTK到iotjs
標(biāo)題來源:http://www.chinadenli.net/article6/jdhiig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)云服務(wù)器網(wǎng)站收錄品牌網(wǎng)站建設(shè)自適應(yīng)網(wǎng)站標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管