(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 |
+----------------------------------------------+
| 豊橋技術科学大学 工学研究科 電子情報工学専攻 |
| 組込みリアルタイムシステム研究室 |
+----------------------------------------------+