[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1425] Re: アクティブウィンドウの高速切替.



  こんにちは、川合です。


Koyanagi Masaaki さんは 2001/01/30 23:06:42 の「[OSASK 1419] Re:
 アクティブウィンドウの高速切替.」で書きました:

>>   そうなのです。各タスクは完全に独立しているために、1つや2つの
>> タスクがおかしくなっても関係ないタスクはへっちゃらなのです。
>これを実際に体験できて幸せです(笑)。VMwareの特権なのかも。

  うーん、実は、VMware上でなくても、その症状がおきた事があるよう
です。詳しくは、[OSASK 1227]をご覧ください。

  また、どうしてもこの手の現象を引き起こしたければ、以下のような
アプリを作ってみるといいでしょう。

---

//  >exe2bin cntdwnc -s 2k

#include <guigui00.h>

#define	AUTO_MALLOC	0

void main()
{
    struct LIB_WINDOW *window;
    struct LIB_TEXTBOX *wintitle, *textbox;
    int count, tmp;
    static char msg[] = "000";

    lib_init(AUTO_MALLOC);
    window = lib_openwindow(AUTO_MALLOC, 0x0200, 17 * 8, 1 * 16);
    wintitle = lib_opentextbox(0x1000, AUTO_MALLOC, 0, 7, 1,  0, 0, window, 0x00c0, 0);
    textbox  = lib_opentextbox(0x0000, AUTO_MALLOC, 0, 3, 1, 56, 0, window, 0x00c0, 0);
    lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "cntdwnc");

    for (;;) {
        for (count = 100; count > 0; count--) {
            tmp = count;
            msg[0] = tmp / 100 + '0'; tmp %= 100;
            msg[1] = tmp /  10 + '0'; tmp %=  10;
            msg[2] = tmp       + '0';
            if (count < 100) {
                msg[0] = ' ';
                if (count < 10)
                    msg[1] = ' ';
            }
            lib_putstring_ASCII(0x0000, 0, 0, textbox, 0, 0, msg);
            lib_waitsignaltime(0x0007, 0, 0, 0, 1, 0);
        }
        lib_putstring_ASCII(0x0000, 0, 0, textbox, 0, 0, "GO!");
        lib_waitsignaltime(0x0007, 0, 0, 0, 10, 0);
        msg[1234567890] = '\0'; // これはもちろん許されない操作
    }
}

---

  このプログラムは、cntdwncに一行書き加えただけのものです。コン
パイル時に警告がでますが、とりあえず実行ファイルができるはずです
。これを実行すれば、「GO!」表示の10秒後に、一般保護例外を出して
止まります。

>>   ですから、エラー表示をウィンドウでするようにして画面の破壊を避
>> け、さらにwinman0の返答に応じないタスクに対する処理を書き加えれ
>> ば、アプリが止まってもまったく動じない強いシステムになります。
>エラー表示がウインドウ内で表示されるようになるとWindowsでよく
>見る状態になりますね。他のタスクに影響が無いこともよく分かるように
>なりますし。

  確かにそうなんです。OSASKのマルチタスク能力を示すには適当な材
料になるでしょう。Windows3.1やTownsSHELLの.EXGだと、1つのアプリ
が止まったらシステム全体が停止してしまうと思いますが、現在のOSAS
Kはたったの53KBでありながら、そんなことはないわけです。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.or.jp
Homepage http://www.imasy.or.jp/~kawai/