Pętla czasowa - działająca przez x sekund - rozwiązane

0

Witam,
Jak zrobić pętlę która działa przez x sekund.
Użytkownik nie może "kręcić" zegarem systemowym.
Myślałem i wymyśliłem iż najbezpieczniejszy(czyt. nie najlepszy) sposób na zrobienie tego to:

  1. Pobieranie godziny ze strony www
  2. Zapisanie tej godziny w zmiennej
  3. Pętla + pobieranie kolejnej godziny; warunek pętli
if((second_H - x) == poczatek)

x - ile czasu pętla ma działać

Ale są na pewno łatwiejsze sposoby na wykonanie tego problemu ;)

0

Nie wiem co dokładnie potrzebujesz, do czego chcesz użyć tą czasową pętlę ale możesz skorzystać z funkcji Sleep():
Thread.Sleep(ILOSC_SEKUND * 1000);

Która zatrzyma pracę twojego programu na określoną ilość sekund?

Pozdrawiam

0

Czemu nie pobierzesz czasu z systemu tylko ze strony?

0

Jak zrobić pętlę która działa przez x sekund.

I robi co?

aktywne czekanie - ciasna pętla nic nie robiąca, a tylko czeka na upływ x sekund? od tego jest Timer.
jakieś obliczenia - tylko dlaczego miałbyś to przerywać po dokładnie iluś sekundach? jakiś benchmark?

2
 
do
{
// tu sobie robisz co chcesz ile chcesz
} while (ObecnyCzas=>CzasDoKtoregoMaDzialacPetla) ; 
0
       private void button1_Click(object sender, RoutedEventArgs e)
        {
            DateTime start = DateTime.Now;
            DateTime end = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, start.Second + 10);
            while (true)
            {
                MessageBox.Show("title", "title", MessageBoxButton.OK);
                if (start == end)
                    break;
            }
        }

mam coś takiego, lecz nie działa ;(

1
 private void button1_Click(object sender, RoutedEventArgs e)
        {
            DateTime start = DateTime.Now;
            DateTime end = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, start.Second + 10);
            while (start != end)
            {
 
                MessageBox.Show("title", "title", MessageBoxButton.OK);
            }
        } 

Oczywiście że nie zadziała skoro masz tutaj nieskończoną pętlę..

BTW. CO TO JEST ; _ ;...

 DateTime end = new DateTime(start.Year, start.Month, start.Day, start.Hour, start.Minute, start.Second + 10); 

Może jednak coś takiego?

 DateTime end = start.AddSeconds(10)
1

Nie mogę patrzeć na tego potworka...
Na szybko.

 private void button1_Click(object sender, RoutedEventArgs e)
        {
            DateTime start = DateTime.Now;
            DateTime end = start.AddSeconds(10000)       
            Datetime temp = start;
            while (true)
            {
                 if(temp > DateTime.Now)
                 {
                //Cos
                 }
                 else{
                 temp = DateTime.Now;
                 }
                MessageBox.Show("title", "title", MessageBoxButton.OK);
                if (temp == end)
                    break;
            }
        } 

Nie rozumie trochę co chcesz osiągnąć i czemu nie wykorzystasz do tego oddzielnego wątku.
A no i ogólnie to co napisałem to jest Herezja i spalcie mnie za to na stosie..

1

Tak na szybko:

static bool stop;
        static void Main(string[] args)
        {
            new Thread(() => { Thread.Sleep(1000); stop = true; }).Start();
            while (!stop)
            {
                //doSomthing();
            }
        }
2

Dorzucę swoje 3 grosze...

			var watch = new Stopwatch();
			watch.Start();
			while (watch.Elapsed < TimeSpan.FromSeconds(6))
			{
				// Tralala...
			}
			watch.Stop();
0

Mam jeszcze jeden problem, mam progressBar z maksymalną wartością 15 oraz pętla trwa 15 sekund. Jak co sekundę w tej pętli "podbić" wartość w progressBar?

0

Przez ten X czasu podczas wykonywania pętli na monitorze będzie zdjęcie czyichś cycków? Pytam bo w tagach wątku są cycki;D

1

Dodajesz timer w GUI. W kodzie w momencie kiedy chcesz odpalić progressBar:

nazwaTimera.Start();

i w metodzie nazwaTimera_Tick(możesz wygenerowac automatycznie jak button_Click) dodajesz:

nazwaProgressBar.Increment(1);

1 użytkowników online, w tym zalogowanych: 0, gości: 1