DLL関数のタイムアウト

[戻る]
wind 2002/07/11(木) 11:33:59
はじめまして、windといいます。
現在、DLLの作成をしていて手が詰まってます。
どなたか助けてください。

まず、変更不可のDLL(fix.dll)と作成しているDLL(test.dll)があります。
test.dllからfix.dllの関数の呼出しで、n秒したら関数が処理中かどうかに関わらず
test.dllに処理を戻したいのですが、どのような方法があるのか見当もつきません。
どなたかご教授のほどよろしくお願いします。

wood 2002/07/11(木) 12:22:58
通常のオブジェクトとして呼び出しているのか
スレッドとして呼び出しているかによって対応が違ってくると思いますが
前者であればタイマー監視すれば可能かと思われますけど
データベースの巨大データアクセス中は無理があるかも知れません
SQLが帰ってこなければ話になりませんから

処理を捨てるのはあまり好ましくないと思いますけど!!

wind 2002/07/11(木) 12:40:34
>通常のオブジェクトとして呼び出しているのか
>スレッドとして呼び出しているかによって対応が違ってくると思いますが
>前者であればタイマー監視すれば可能かと思われますけど
前者です。
SetTimer,KillTimerを使用するのでしょうか?
ちょっと試してみたんですが、うまくいきませんでした。
何か参考になるようなものはないでしょうか?

>データベースの巨大データアクセス中は無理があるかも知れません
>SQLが帰ってこなければ話になりませんから
>処理を捨てるのはあまり好ましくないと思いますけど!!
SQLじゃないですが、通信が返ってこないとfix.dllで固まってしまうので、
処理を無理やり戻して返却値を見て正常に終了したかどうかを判断したいのです。

それと、書き忘れですが、MFCは使用してません。
よろしくお願いします。

wood 2002/07/11(木) 12:53:38
>処理を無理やり戻して返却値を見て正常に終了したかどうかを判断したいのです。
判断できないんじゃないですか?
それに依存先が戻ってこないのを、自分でどうにかできるとは思えませんけど
FIX.DLL(変更不可)と成っている、と言うことはソース持っていないと
言うことですよね

[E-Mail] 2002/07/11(木) 13:03:46
現在は test.dll -> fix.dll という形で呼び出しているんですよね?
これを test.dll -> test2.exe -> fix.dll という感じで別EXE にした方が
なんとなく望ましい制御がしやすい気もするんですが。

これをやってしまって良いかまでは判断できませんので、ご参考ってことで。

wind 2002/07/11(木) 13:12:25
早速のレスありがとうございます。

>FIX.DLL(変更不可)と成っている、と言うことはソース持っていないと
>言うことですよね
そのとおりです。

>現在は test.dll -> fix.dll という形で呼び出しているんですよね?
>これを test.dll -> test2.exe -> fix.dll という感じで別EXE にした方が
>なんとなく望ましい制御がしやすい気もするんですが。
望ましいというのは、test.dll -> fix.dllでもできるということでしょうか?

[E-Mail] 2002/07/11(木) 13:42:31
> 望ましいというのは、test.dll -> fix.dllでもできるということでしょうか?

えっと、wind さんの希望として、
「fix.dllの処理を実行しても時間がきたらやめてしまいたい」
というお話があると思うんですが、 fix.dll を変更できないのであれば、

1.test.dll から test2.exe を CreateProcess で起動
2.起動された test2.exe では fix.dll の処理を実行
3.test.dll は 2 が行われている間、WaitForSingleObject で終了待ち合わせ
4.2が終了したら test.dll の処理を続行

というのも一案かな?と思ったんですね。

WaitForSingleObject はタイムアウトの時間が指定できるんで、
あとは、test.dll と test2.exe のやり取りさえ解決できれば
希望の動作が可能と思います。

まぁ、上記手順だと fix.dll の動作を終了すると言うよりは、「ほっといて次の処理」
という感覚なんで工夫の余地は多分にあると思います。

古いスレッドには追加発言できません。