Diskuze: Stale bezici program. - Jak ?
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 28 zpráv z 28.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, snad jsem správně pochopil otázku. Pokud chceš něco stále dokola
opakovat, můžeš použít while cyklus.
https://www.itnetwork.cz/…ly-for-while
While funguje tak, že se kód opakuje pokud je splněná daná podmínka.
Například:
bool pokracovat = true;
while(pokracovat)
{
// tento kód se bude opakovat dokud platí, že pokracovat == true
}
Když pak budeš chtít s opakováním skončit v cyklu nastav pokracovat na false.
Doporučuju si projít zdejší seriál C#.
Pardon, nevyjadril jsem se uplne. Cyklu while jsem si vedom. Avsak prisel mi
dost nepraktický z důvodu zátěže pc. Ovsem pokud ho doporucujete tak ho
pouziji.
Já bych ale rád z té konzole ovladal zapnutí a vypnutí programu.
Napriklad pokud se program zepta "Spustit program? y/n".
Tak po zadaní y se bool nastaví na true a cyklus jede. Ael co kdyz ho chci v
nejake fázi zastavit napriklad dalsim stiskem klavesy a poté zase opetovne
spustit?
Díky
Pro opakované spouštění jsme používali nuget balíček Quartz. Nastavis si tam jak často chceš spouštět a metoda se provede. Myslím že tam jde nastavit ať se nepouští metoda znova, pokud první nedoběhla.
Nic lepsiho nez nekonecny cyklus nevymyslis.
Abys nezatezoval PC, tak staci vzdycky po kazdym prubehu zavolat treba
Thread.Sleep(20);
Možná ti pomůže toto:
bool pokracovat = true;
while (pokracovat)
{
//Sem napiš co má program dělat
Console.Write("Chceš pokračovat? ano/ne");
string odpoved = Console.ReadLine();
pokracovat = odpoved == "ano";
//Kontrola vstupu
bool chybnyVstup = odpoved != "ano" && odpoved != "ne";
if (chybnyVstup) while (chybnyVstup)
{
//Sem vlož ošetření chybného vstupu, třeba něco jako Console.Write("Neplatný vstup, zadej odpověď znovu")
odpoved = Console.ReadLine();
pokracovat = odpoved == "ano";
chybnyVstup = odpoved != "ano" && odpoved != "ne";
}
}
Psal jsem to bez jakýchkoliv pomocných metod a OOP obecně, protože tvoje otázka mi přišla začátečnická tak jsem se neopíral o to že to budeš znát Kdyžtak si to můžeš do OOP přepsat.
Doufám že jsem pochopil tvoji otázku
Diky moc za odpoved.. OOP trochu znam ale jinak jsi me na zacatecnika odhadl
dobre.
Ovsem tohle co pises nuti uzivatele u kazdeho iritace zadavat ano. Pocitam ze
tech iritaci bude treba 1000 nez to uzivatel stopne. Takze to neni uplne
prakticke.
Smeroval jsem spis k tomu jak jsou napsány programy kde zkratka stisknes tlacitko START, neco se deje a pak STOP a program se zastavi...
a musí to být nutně konzolová aplikace? když budeš mít aplikaci s oknem a frontou zpráv, tak při nečinnosti (tj. když uživatel nějak požaduje "stop") zatěžuje procesor ještě méně než stále běžící cyklus se sleepem)..
Suhlasim. Inak ja by som to spravil rekurzivne ked to chce v konzoli a aby to reagovalo na nejaku klavesu.
static void Main(string[] args)
{
Console.WriteLine("Do you want to continue ? (ano/ne)");
string result = Console.ReadLine();
bool resume = (result == "ano") ? true : false;
while (!Console.KeyAvailable && resume == true)
{
Console.WriteLine("Working... Press any key to stop");
}
Main(args);
}
Nutně konzolová být nemusí. Ale nemyslím si že jsem schopne momentalné
napsat neco ve WindowsForm...
Ale všem dekuji...
Robertovi dekuji obzvlast, to je to co jsem hledal... Hlavne me nikdy nenapadlo ze se da volat hlavní funkce. Takze jsem osvícen
Ale nemyslím si že jsem schopne momentalné napsat neco ve WindowsForm...
Proč chceš psát něco ve WinForms? Proč ne WPF?
Protože je začátečník a v momentě kdy to psál, nevěděl že existuje nějaké WPF nebo že WPF není tosamé co WinForms?
PS: Nemyslím si, že je to dobra praktika volat rekurzivně metodu Main(v C# zatím moc nedělám).
Nemyslím si, že je to dobra praktika volat rekurzivně metodu Main
No suhlasim jenom ked ze c# zacina a este si netrufne ani na WPF tak mi to pride ako najjednoduhsie riesenie ako sa dostat na pozadovany vysledek(ked nepocitam do while ktorym by to taky slo ale nebolo by to to same).To som mu rovno mohol napisat asynchronni task ktory by mu bol na 2 veci. Takto uz aspon vie aka je rekurzivni metoda.
Nemyslím si, že je to dobra praktika volat rekurzivně metodu Main(v C# zatím moc nedělám).
Kdo mluvil o rekurzivním volání metody Main?
LOL jako řešení označeno něco, kde je neukončená rekurze, tak to jsem ještě nežral - dokonce ani tady na itnetworku
Mně zas fascinuje, že nikdo neřeší co on vlastně chce
>Já bych ale rád z té konzole ovladal zapnutí a vypnutí programu.
Chce program pro zapínání jiného programu, nebo otevírat program z programu, který zrovna zavřel a nemá teda kam napsat to "y"
>Napriklad pokud se program zepta "Spustit program? y/n".
To IMO nechce:
Mě se ale přes API mění proměnné a tudíž potřebuji aby se program neustále opakoval. Jak toho nejsnáze docílit?
Moc Vám všem dekuji za komentare. Ano jako zacatecnik vse resim za pochodu a oznacil jsem reseni ktere se mi tak zdalo. To ze by to po case zaplnilo pamet jsem nevedel.
Uz to pasuju. do WPF. Ale problem zustava stejny. Jednim tlacitkem (START)
spustím smycku a po nejake dobe bych ji zase rad vypl jinym tlacitkem (STOP).
Myslim ze tohle se musi dat nejak resit.
Pokud mam nejakou instalacku tak taky po kliknutí na INSTAL mate moznost
"Pause" nebo "Cancel" pro zastavení. Neco podobneho mam na mysli.
Asi bys potřeboval něco jako toto:
https://stackoverflow.com/…ync-function
Dajte teda reseni ktore mu bude vyhovovat misto toho aby o tom kazdy jen kecal.
LOL jako řešení označeno něco, kde je neukončená rekurze, tak to jsem ještě nežral
Proto ze to oznacil ako reseni neznamena ze nemuzes postnut neco lepsi.
Pride mi to ze kazdy vsetko umi, vsetci vedi co je spatne ale nikto nic konstruktivneho nenapise... Kazdy neco hodnoti ale k jeho problemu se vyjadrilo jen par lidi. Jako nehnevajte se na mne ale tato debata mu bude na 2 veci...
Tak proč by to psal, kdyby to nechtěl?
A na to, co cituješ přece dostal odpovědí několik - bohužel si vybral tu
nejhorší možnou
To ostatním hodně křivdíš, správný postup tu byl napsaný, hned první odpověď byla "while cyklus" a o pár odpovědí dále, aby použil
Thread.Sleep
pokud nechce zbytečně vytěžovat CPU.
ostrozan To ví jedině OP, k čemu to přesně chce, ale tipuji, že tahá data z webu nebo tak něco a pak s nimi pracuje nějak.
V čem je problem? Vytvoř signální proměnnou a nastav její počáteční hodnotu. V nekonečném cyklu vlož vlastní výpočet do bloku v podmínce řízeného signální proměnnou. Dále vytvoř neblokující funkci detekující vstupy uživatele, kterou budeš volat v nekonečném cyklu. Analyzuj vstup a na základě podmínky provádějící kontrolu nad nekonečným cyklem proveď přepnutí signální proměnné, čímž odpojíš nebo připojíš blok s vlastním výpočtem.
Jsem rád že nakonec jsi zvolil naopak to nejlepší řešení z
nabízených, ale myslím že jsi zbytečně úzkostlivý ohledně
vytěžování procesoru - tuhle tvoji aplikaci nejspíš ani nepozná -
schválně se podívej, kolik ti běží procesů jenom na samotných Windows a
to nemusíš mít ani nic dalšího spuštěného.
Tohle prostě neřeš.
Ještě dodám :
co to je proti JVM která mi žere 30% výkonu i5ky
Zobrazeno 28 zpráv z 28.