(toppers-users 145) Re: Visual C++ 続き  5  追加の件

Takayuki WAKABAYASHI takayuki @ ertl.ics.tut.ac.jp
2001年 4月 19日 (木) 14:12:51 JST


豊橋技術科学大学の若林です。

Misaki Yuichi さんは書きました:
 > マネージャ本体のほうの修正は、どうなりましたか?
 > 状況を教えてください。

現在、実装方法を検討している段階です。
マネージャ本体に関しては、大掛かりな手直しが必要であると
考えています。

具体的には、途中で強制終了されたプロセスが再度起動したとき、
それが前回と同一のプロセスであることを判定する方法と、
前回起動されたプロセスがすでにメモリ上にないことを確認する
方法の2つを、どのような手法で実装するかを思案しています。

単純にIKernelEventにKeepAliveのようなものを搭載し、定期的に
実行することで実現できるのですが、今回COMを使用しているので
安易にインタフェースを修正するのは避けたいと思います。
 #COMのインタフェースは完全な下位互換性を保持しなければならない

またSetWindowsHookEx関数などを利用しても実現できるのですが、
専用DLLが必要になるなどの問題があります。

しかし、様子を見るとお急ぎのようですので、
とりあえずのパッチを載せます。

場所 : windef/devicemanager/stdafx.cpp:234付近
内容 : 新しい要求が来たとき、古い接続を破棄して新しい接続を優先する

修正前 DebugOut(::wsprintfA(Buffer,"AttachKernel\n"));
修正前
修正前 ::EnterCriticalSection(&cs);

修正後 DebugOut(::wsprintfA(Buffer,"AttachKernel\n"));
修正後 if(Kernel != NULL)
修正後     DetachKernel(Kernel);
修正後 ::EnterCriticalSection(&cs);

予想される既知の障害としては、連続して2つインスタンスを起動すると
先に起動した方の動作がおかしくなることが挙げられます。
 #途中からデバイスが利用できなくなったことが判らないため

以上 大変ご迷惑おかけしますが、よろしくお願いします。

+----------------------------------------------+
| Takayuki WAKABAYASHI (わかばやし たかゆき)   |
|  mailto: takayuki @ ertl.ics.tut.ac.jp         |
+----------------------------------------------+
| 豊橋技術科学大学 工学研究科 電子情報工学専攻 |
|   組込みリアルタイムシステム研究室           |
+----------------------------------------------+