[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/