C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 22 を表示中)
■9354 / )  Re[3]: c# タイムアウトに関して
□投稿者/ mk (2回)-(2007/10/25(Thu) 08:55:22)
回答いただきありがとうございます。タイマを使う方法でやってみました。
下記の方法でタイムアウトは検出できるのですが、呼び出し側がずうっと帰って
こなかった場合、そのまま固まってしまいます。
タイムアウトした場合は、次の処理に遷移できないのでしょうか?

/// <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();
}
}




返信 編集キー/


管理者用

- Child Tree -