Diskuze: Timer alebo Sleep
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 24 zpráv z 24.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Myslím že tá možnosť s timerom pretože v druhej možnosti uspíš celé vlákno a gui ti nebude reagovať (aplikácia sa bude správať ako keby zamrzla).
A co Timer vlákna? Tedy v System.Threading máš Timer, co ti jede jako vlastní vlákno. Totéž by šlo i s tím Sleepem. (Není náhoda, že se to taktéž nachází Threading) Otázkou je tedy, zda-li chce pracovat s celými vlákny... (Ve skutečnosti Timer jede vždy v nějakém vlákně - je to samostatný subproces.)
Timer je něco, co jede stále ve stejném intervalu - a počítáme s tím dlouhodobě. Sleep poskytuje snadnou možnost kdykoliv utéci a kdykoliv měnit prodlevu. (U Timeru to je složitější...)
Ja viem...Ale keď uspíš podproces na ktorom beží to okno (form) tak sa aplikácia bude správať ako zamrznutá.
Ja myslím že to okno bude označené (windowsom) ako neodpovedá. Nemyslel som to tak že sa uspia všetky vlâkna.
System.Windows.Forms.Timer, který se defaultně v WinForms používá, běží ve stejném vlákně jako Form.
Pokud těch 200ms lag není moc, tak bych klidně ten čekací cyklus po kliku na tlačítko, případně ho upravil takhle:
for (int i = 0; i < 6; i++)
{
for (int j=0; j<4; j++) // nebylo by od věci tenhle cyklus hodit do samostatne funce typu cekej(int interval)
{
System.Threading.Thread.Sleep(50);
Application.DoEvents();
}
HodKockou();
}
50ms už uživatel nejspíš nepozná (těch 200ms by ještě mohl postřehnout).
Díky za názory. Ešte by ma zaujímal názor sdraco, pretože on mi stále radil vo všeobecnosti Timer.
Obidve možnosti pracujú pri spustení aplikácie identicky. Navyše ja potrebujem v tej momente len to, aby sa hádzala kocka, žiadna iná činnosť sa nevykonáva.
Pokud předem nevíš, kolikrát se ta akce bude opakovat nebo jich má běžet víc najednou, tak bych použil Timer, pokud běží jen jedna po kliku na tlačítko a má se spustit jen několikrát, tak Timer není potřeba a s klidem bych to udělal přes to tlačítko (a sleep + předání řízení zpět formu).
Pro začátečníka je Timer jednodušší v tom, že nemusí umět používat Thread.Sleep() a Application.DoEvents().
Timer je jediné správné řešení, protože funguje na principu událostí. WinForms jsou tak navržené, volání něčeho takového v cyklu jsou jen návyky z konzole, které sem již nepatří.
Když budeš potřebovat, aby se událost stala po kliku na tlačítko a pak ještě jednou po jedné vteřině, tak kvůli tomu taky budeš vytvářet na to Timer?
Ano, pokud potřebuješ vteřinu čekat, uděláš si k tomu Timer, nevidím na tom nic divného, tak je ten FW navržený.
Ďakujem, presne toto ma zaujímalo. 
Již jsem ti to tu několikrát přeci říkal.
Máš pravdu, ale ako vidíš, sú tu aj oveľa skúsenejší ako ja a
pochybujú.
Potvrdil si to a keď to tu pár členov prečítalo, budú si v tom istí.
Opakovanie je matka múdrosti. 
Nebylo by na tohle čekání jednodušší použít async a await? Nebo se to sem nehodí?
Jenom ještě dodám, že jsem měl na mysli něco takového:
async private void pbxKocka_Click(object sender, EventArgs e)
{
for (int i = 0; i < 6; i++)
{
await Task.Delay(200);
HodKockou();
}
}
Timer bych použil až teprve, kdyby bylo nutné cílit na nižší verzi
.NET Frameworku 
Mňa už sdraco presvedčil, že Timer je pre WinForm ideálny, je jeho súčasťou. Pozeral som na nete aj async a await, ale ako príklad je tam použitie v konzole. Timer (myslím) sa dá použiť len vo WinForm.
Když si přidáš referenci, tak jde použít i v consoli.
No mohl bys použit timer. Tak sámo jako v consoli si můžeš vytvořit nový form a pracovat s ním.
Timer z Formu by v konzolové aplikaci fungoval jen kdyby jsi tam zpracovaval frontu zprav.
Zobrazeno 24 zpráv z 24.