zoukankan      html  css  js  c++  java
  • KJAVA虚拟机Hack笔记实现MIDP的SLAVE事件模型

    转载时请注明出处和作者联系方式
    文章出处:http://www.limodev.cn/blog
    作者联系方式:李先静 <xianjimli at hotmail dot com>

    MIDP 有两种事件模型,一种称为MASTER模型,在这种模型中,以虚拟机为主GUI为从,事件的主循环在虚拟机中实现。另外一种称为SLAVE,在这种模型 中,以GUI为主虚拟机为从,主循环在GUI中实现,目前只有QTE使用这种方式。我想GTK+和QTE的事件处理很类似,猜测GTK+也应该采用 SLAVE模型。

    移植到GTK+上时,我们仿照QTE建立events/slavemode_port/linux_gtk目录。主要实现两个函数就行了:

    1. midp_slavemode_port_schedule_vm_timeslice 这是虚拟机调度的定时器,这个可以用glib的timeout来实现。

    void midp_slavemode_port_schedule_vm_timeslice(void)
    {
    g_source_remove(g_schedule_tinfo.timer_id);
    g_schedule_tinfo.timer_id = g_timeout_add(g_schedule_tinfo.time_slice,
    schedule_timer, &g_schedule_tinfo);

    return;
    }

    static gboolean schedule_timer(gpointer data)
    {
    jlong ms = 0;
    ScheduleTimerInfo* info = (ScheduleTimerInfo*)data;

    if(info->vm_stoped)
    {
    return FALSE;
    }

    midp_checkAndResume();

    ms = JVM_TimeSlice();
    if (midp_getSRState() == SR_SUSPENDED)
    {
    ms = SR_RESUME_CHECK_TIMEOUT;
    }

    if (ms <= -2)
    {
    info->vm_stoped = TRUE;
    }
    else if(ms == -1)
    {
    gtk_main_quit();
    }
    else
    {
    ms = ms & 0x7fffffff;
    info->timer_id = g_timeout_add(ms, schedule_timer, data);
    }

    return FALSE;
    }

    这里要注意的是,JVM_TimeSlice返回-2表示虚拟机暂停了,返回-1表示要退出虚拟机,其它的则表示下一个定时器的时间,默认时间片长度为SR_RESUME_CHECK_TIMEOUT。

    2.midp_slavemode_port_event_loop 这个就是GUI事件的主循环,实现很简单,直接调用gtk_main就好了。这时还要加一个初始的定时器。

    void midp_slavemode_port_event_loop(void)
    {
    g_schedule_tinfo.vm_stoped = FALSE;
    g_schedule_tinfo.time_slice = SR_RESUME_CHECK_TIMEOUT;
    g_schedule_tinfo.timer_id = g_timeout_add(g_schedule_tinfo.time_slice,
    schedule_timer, &g_schedule_tinfo);

    gtk_main();

    g_schedule_tinfo.vm_stoped = TRUE;

    return;
    }


    欢迎到Linux mobile development上交流

  • 相关阅读:
    趣图:程序员告诉你为什么充钱后速度更快
    金三银四铜五铁六,面试得做好这个准备
    Java中如何模拟真正的同时并发请求?
    趣图:程序员最头疼的原因
    Java并发面试题
    linux内存分配与回收
    7.3 Set集合
    7.2 Java 11新增的Collection和Iterator接口
    7.1 Java集合概念
    6.5 正则表达式
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167587.html
Copyright © 2011-2022 走看看