|
回答いただきありがとうございます。タイマを使う方法でやってみました。 下記の方法でタイムアウトは検出できるのですが、呼び出し側がずうっと帰って こなかった場合、そのまま固まってしまいます。 タイムアウトした場合は、次の処理に遷移できないのでしょうか?
/// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main(string[] args) { TimerThread tt = new TimerThread(100000); try { DLLのメソッド呼び出し。 Console.WriteLine("テスト"); } finally { tt.Terminate(); } return; }
public class TimerThread {
private DateTime timeoutTime; private uint currentThreadId; private bool terminateFlag; private Thread thread;
/// <summary> /// コンストラクタです。 /// </summary> /// <param name="timeoutMillisec">タイムアウト値(ミリ秒)。</param> public TimerThread(int timeoutMillisec) { this.timeoutTime = DateTime.Now.AddMilliseconds(timeoutMillisec); this.currentThreadId = (UInt32)AppDomain.GetCurrentThreadId(); this.terminateFlag = false; this.thread = new Thread(new ThreadStart(this.ThreadProc)); this.thread.Start(); }
/// <summary> /// スレッド関数です。 /// </summary> private void ThreadProc() { while (!this.terminateFlag) { Thread.Sleep(100); if (DateTime.Now > this.timeoutTime) { // タイムアウトが発生 Console.WriteLine("timuout"); return; } } }
/// <summary> /// タイムアウト監視用スレッドを終了させます。 /// </summary> public void Terminate() { this.terminateFlag = true; this.thread.Join(); } }
|