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

Pętla czasowa - działająca przez x sekund - rozwiązane
Trebuh
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: okolice Łodzi
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
Kopiuj
if((second_H - x) == poczatek)

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

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

CZ
  • Rejestracja: dni
  • Ostatnio: dni
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

AN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 989
0

Czemu nie pobierzesz czasu z systemu tylko ze strony?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
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?

fourfour
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 627
2
Kopiuj
 
do
{
// tu sobie robisz co chcesz ile chcesz
} while (ObecnyCzas=>CzasDoKtoregoMaDzialacPetla) ; 
Trebuh
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: okolice Łodzi
0
Kopiuj
       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 ;(

Wojski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
1
Kopiuj
 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 ; _ ;...

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

Może jednak coś takiego?

Kopiuj
 DateTime end = start.AddSeconds(10)
Wojski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
1

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

Kopiuj
 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..

dam1an
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1589
1

Tak na szybko:

Kopiuj
static bool stop;
        static void Main(string[] args)
        {
            new Thread(() => { Thread.Sleep(1000); stop = true; }).Start();
            while (!stop)
            {
                //doSomthing();
            }
        }
DibbyDum
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Polska, Kraków
2

Dorzucę swoje 3 grosze...

Kopiuj
			var watch = new Stopwatch();
			watch.Start();
			while (watch.Elapsed < TimeSpan.FromSeconds(6))
			{
				// Tralala...
			}
			watch.Stop();
Trebuh
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: okolice Łodzi
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?

Florian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
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

Progress
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 220
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);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.