Время выполнения метода в C # - PullRequest
0 голосов
/ 09 июля 2011

У меня есть метод send(), который я хочу выполнять / вызывать каждую 1 секунду.Я испытываю трудности с реализацией этого.До сих пор это то, что я придумал в своей основной программе:

bool done = false;
while (!done)
{
    string vCurrent = RandomVoltage(220, 240) + "" + RandomCurrent(10, 13);
    int seconds = RandomSec();
    if (isEven(seconds))
    send(vCurrent, "169.254.156.135");//send the string to the ip address
}

Итак, в основном я пытаюсь вызвать мой метод send() для каждой секунды текущего четного времени, и я пропускаю нечетноесекунд, вот как я попытался реализовать это с помощью моих RandomSec() и isEven() методов:

    private static readonly object syncLock = new object();
    public static int RandomSec()
    {
        lock (syncLock)
        { 
            return DateTime.Now.Second;
        }
    }

    public static bool isEven(int sec)
    {
        if ((sec % 2) == 0)
            return true;
        else return false;
    }

Теперь проблема в том, что я запускаю цикл while в моей программе,Мой метод send() отправляет большой набор строк за 1 секунду, затем делает паузу на 1 секунду, а затем отправляет еще один большой набор сообщений, когда текущая секунда снова равна.Как я могу заставить мою программу выполнять мой метод send() только ОДИН РАЗ в 1 секунду, чтобы метод send() отправлял только 1 строку каждую четную секунду, а не 20/30 из них.Могу ли я вызвать мой send() метод в цикле с контролем времени?Любая помощь с благодарностью.

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 09 июля 2011
1 голос
/ 09 июля 2011

Вы можете использовать Класс таймера .

Пример кода по ссылке выше:

public class Timer1
 {

     public static void Main()
     {
         System.Timers.Timer aTimer = new System.Timers.Timer();
         aTimer.Elapsed+=new ElapsedEventHandler(OnTimedEvent);
         // Set the Interval to 5 seconds.
         aTimer.Interval=5000;
         aTimer.Enabled=true;

         Console.WriteLine("Press \'q\' to quit the sample.");
         while(Console.Read()!='q');
     }

     // Specify what you want to happen when the Elapsed event is raised.
     private static void OnTimedEvent(object source, ElapsedEventArgs e)
     {
         Console.WriteLine("Hello World!");
     }
 }
1 голос
/ 09 июля 2011

Гораздо проще отправить строку, подождать / поспать секунду (или две), а затем отправить следующую.

Опрос по времени, много раз в секунду, вызовет эффект, который выпереживают

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...