У меня есть клиент-серверное приложение, и я хочу периодически проверять, если клиент отключился от сервера.StopWatch в отдельной перезагрузке потока
Я решил, что проверю входящие пакеты. Если я получил какое-либо время, позвольте сказать 15 секунд, у меня есть действующее соединение, , если нет, я отключился и попытаюсь снова подключиться.
До сих пор у меня есть этот пример кода (это образец воссозданной из моего кода):
namespace TimerExample
{
class Program
{
static void Main(string[] args)
{
HandlePackets();
}
public void HandlePackets()
{
//code that handles incomming packets
foo test = new foo();
test.StartThread();
}
}
class foo
{
public bool _isRunning { get; set; }
private Stopwatch sw { get; set; }
public void StartThread()
{
this._isRunning = true;
new Thread(new ThreadStart(this.DoWork)).Start();
this.sw.Restart();
}
public void StopThread()
{
this._isRunning = false;
this.sw.Stop();
}
private void DoWork()
{
while (this._isRunning)
{
Console.WriteLine("Elapsed in miliseconds: " + this.GetRuntime().ToString());
if (GetRuntime() > 15000)
{
Console.WriteLine("Client disconnected.... restarting");
this.StopThread();
}
Thread.Sleep(1000);
}
}
public long GetRuntime()
{
return this.sw.ElapsedMilliseconds;
}
public foo()
{
_isRunning = false;
sw = new Stopwatch();
}
}
}
То, что я хочу для кода, который будет делать это: Функция HandlePackets
будет выполняться каждый раз, когда пакет прибудет. Внутри этой функции я позвоню функции StartThread
, которая будет работать Stopwatch
в отдельной теме, и этот процесс продолжится до тех пор, пока stopwatch
истекшее время в миллисекундах не будет больше, чем позволяет сказать 15 секунд.
Если это произойдет, я позвоню Reconnect
.
Таким образом, в основном таймер будет перезапускаться каждый раз, когда принимается пакет и будет повторно подключаться, если ElapsedTime
будет больше 15 секунд.
На самом деле я не вижу здесь вопроса. Что ты спрашиваешь? Что не так с кодом, который у вас есть? –