Diskuze: C# Console - zmáčknutí klávesy
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 14 zpráv z 14.
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.
Přes vlákna 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace Con
{
class Program
{
static void Main(string[] args)
{
Thread t = new Thread(vypisuj);
t.Start();
while (true)
{
ConsoleKeyInfo c = Console.ReadKey();
if (c.Key == ConsoleKey.P)
{
Console.WriteLine(Math.PI);
}
}
}
static void vypisuj()
{
for (int i = 0; i < 10000; i++)
{
Console.WriteLine(i);
Thread.Sleep(100);
}
}
}
}
No to není moc dobré řešení. Jestli začíná (a vzhledem k tomu, že
zmiňuje konzolovku tak jo), je zbytečné ho trápit synchronizací mezi
vlákny.
Tohle ti pomůže víc
https://msdn.microsoft.com/….110%29.aspx
jestliže bude znak na vstupu, tak jej přečteš, jinak čtení přeskočíš.
Jak je i v příkladu, doporučuji to zkombinovat s Console.ReadKey(true).
https://msdn.microsoft.com/….110%29.aspx
http://www.itnetwork.cz/dev-lighter/473
Tohle jsem před nějakou dobou postoval, třeba najdeš inspiraci v něčem.
Neměly by se objekty, ke kterým se přistupuje ve vlákně, zamykat? A
vůbec, přistupovat k proměnné, kterou vlákno dostalo z vnějšího
kontextu, místo aby ji dostalo v parametru, to by se taky vyskytovat
nemělo.
Nevím teda, jestli se jedná o vhodný příklad...
Kdyby nedělal hada v konzoli, tak synchronizaci nemusí řešit - použil by timer.
Nic protithreadového tam nevidím, jestli máš nějaký návrh, uprav a pošli.
Tak to mám hotové
udělal jsem to jednoduše:
ConsoleKey c_key = ConsoleKey.DownArray;
if (Console.KeyAvailable)
c_key = Console.ReadKey().Key;
Ohledně těch vláken, přečetl jsem si tady na itnetwork.cz úvod a autor od nich docela odrazuje. Ani jsem ještě nenarazil na případ, kdy bych je musel použít.
Mohl bych někdy udělat program, který si zapíše do registru, aby se
zapínal po spuštění PC. Potom by se zapnul výpočet na všechny jádra nebo
by se soubory zuřivě kopírovaly a mazaly atd. Ty programy by byly dva. Když
by se vypl jeden, druhý by ho zapnul, to samé naopak. Takový vir 
Šlo by to?

S vlákny jsem se moc do hloubky nezabýval, ale jestliže mají dvě vlákna přístup do stejné paměti, měla by být paměť synchronizovaná tak, aby se nestalo, že jedno vlákno bude zapisovat a druhé vlákno bude ze stejného místa číst. Aspoň tak to mám naučené já. V tom kódu není nic, co by takové situaci zabránilo.
Abych si nerozkopal PC, radši to dělat nebudu.
Tady zrovna žádné zamykání ani synchronizace potřeba nejsou, maximálně bych k
private Direction direction;
přidal pro jistotu volatile, protože tu proměnnou mění v druhém vlákně.
Zobrazeno 14 zpráv z 14.