DLL関数のタイムアウト – プログラミング – Home

通知
すべてクリア

DLL関数のタイムアウト


wind
 wind
(@wind)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

はじめまして、windといいます。
現在、DLLの作成をしていて手が詰まってます。
どなたか助けてください。

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


引用解決済
トピックタグ
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

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

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


返信引用
wind
 wind
(@wind)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

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

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

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


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

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


返信引用
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 81
 

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

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


返信引用
wind
 wind
(@wind)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

早速のレスありがとうございます。

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

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


返信引用
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 81
 

> 望ましいというのは、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 の動作を終了すると言うよりは、「ほっといて次の処理」
という感覚なんで工夫の余地は多分にあると思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました