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上交流

  • 相关阅读:
    指定的参数已超出有效值的范围。参数名:sit ,先仔细看看错误和我的一样不一样
    简单说下C#变量的作用域
    C#常用的字符串处理方法
    驼峰命名、帕斯卡命名、匈牙利命名--三种命名方法
    Python的安装
    Python下numpy的使用
    命名法:骆驼(Camel)、帕斯卡(pascal)、匈牙利(Hungarian)、下划线(_)
    PHP中高级面试问题集锦
    利用python,生成word
    python实现网页截图
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167587.html
Copyright © 2011-2022 走看看