[c#] Timer
хз. Вообще говоря CheckStatus у тебя каждый раз вызывается в новом треде (насколько я понимаю при этом если вдруг так получится, что она не успеет завершиться за эти самые шесть секунд (до следующего вызова таймера то может произойти что угодно.
Хм вот я тоже так подумал.
Нить как то закрывать?
Нить как то закрывать?
Может здесь что-то сделать что бы приостановить, а затем вызвать функцию внутри нити снова
ThreadPool.QueueUserWorkItem(new WaitCallback(EstablishSocket;
ThreadPool.QueueUserWorkItem(new WaitCallback(EstablishSocket;
Нити, которые порождаются потоковым таймером, берутся из Тредпула. Их завершать самому категорически не рекомендуется. Приостанавливать, имхо, тоже - основное назначение тредпуловых потоков - выполнить некую операцию и вернутся в пул как можно быстрее.
Честно говоря, вэтих твоих примерах очень много использользований нитей. Например, в конкретном коде каждый тик таймера - новая нить, как сказано было выше. Есть маза как можно реже создавать нити, только по необходимости, ибо каждая нить - это не только мегабайт в стеке, но и неебовые проблемы с синхронизацией.
Варианты деланья что-либо по таймеру:
1. Сделать отдельный тред, причем не из тредпула, а руками -
Thread timerThread = new Thread(new ThreadStart(timerMethod;
void timerMethod
{
while(true)
{
Thread.Sleep(timerInterval);
DoSomeWork;
}
}
В этом случае все вызовы DoSomeWork упорядоченны в времени, да и тред твой и управляется относительно легко...
2. Заботать класс System.Timers.Timer, в мсдне сказано, что это типо серверный таймер....
Больше ничего не знаю, ибо не юзал.
Честно говоря, вэтих твоих примерах очень много использользований нитей. Например, в конкретном коде каждый тик таймера - новая нить, как сказано было выше. Есть маза как можно реже создавать нити, только по необходимости, ибо каждая нить - это не только мегабайт в стеке, но и неебовые проблемы с синхронизацией.
Варианты деланья что-либо по таймеру:
1. Сделать отдельный тред, причем не из тредпула, а руками -
Thread timerThread = new Thread(new ThreadStart(timerMethod;
void timerMethod
{
while(true)
{
Thread.Sleep(timerInterval);
DoSomeWork;
}
}
В этом случае все вызовы DoSomeWork упорядоченны в времени, да и тред твой и управляется относительно легко...
2. Заботать класс System.Timers.Timer, в мсдне сказано, что это типо серверный таймер....
Больше ничего не знаю, ибо не юзал.
Спасибо сейчас буду пробывать.
Оставить комментарий
markmsk
Сделал такой таймерВопрос такой как-то странно себя ведёт этот таймер. Через некоторое время начинает без задержки вызывать функцию.
Функция которая вызывается вызывает соединение с сервером через сокет.