Diskuze: Nějaké jiné řešení? C#
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 17 zpráv z 17.
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.


Podívej, pokud nenapíšeš jedinou větu, co bude dávat smysl, nevím jak ti mám pomoci. Pokusím se - stopwatch - to je tedy nějaký odpočet? Snažíš se o časovaný suspend? (režim spánku) Veškeré proměnné intervalu co tam máš, má samotný časovač Forms. Lze z něj dostat i TimeSpan...
"http://msdn.microsoft.com/en-us/library/system.windows.forms.timer(v=vs.110).aspx"
Pokud se nesnažíš o časovač, ale jen o zpožďění, použij System.Threading.Thread.Sleep...
Snažím se o interval 1ms který ale nebude pozastavovat všechny ostatní věci v projektu jako Thread.Sleep.(1);
EDIT: jinak ten Stopwatch si můžeš z kódu odmyslet byl tam protože jsem to zkoušel přes něj ale teď je tam zbytečně.
Moc jsem nepochopil, co přesně potřebuješ, ale pokud ti jde o to, aby si i po "uspání" pohybu mohl s aplikací pracovat, tak si vytvoř nové vlákno a pusť to v něm. Bude ti to dělat co potřebuješ a s aplikací půjde normálně pracovat.
Vytvoříš nové vlákno a spustíš.
Thread thr2 = new Thread(() => Posun());
thr2.Start();
Přečti si důkladně mou odpověď. Sleep není časovač, ale uspání vlákna - v tomto případě hlavního vlákna. Zato Timer, to je jiná. I vlákna mají časovače - viz. System.Threading.Timer:
"http://msdn.microsoft.com/cs-cz/library/system.threading.timer(v=vs.110).aspx"
Raději bych se tu přestal bavit o vláknech, nechci ho zatěžovat něčím tak složitým, co ani já tolik nepoužívám. Ať se vykašle na vlákna - stačí časovač formulářů...
Právě že já bych nechtěl používat timer protože ikdyž ho ve WF
nastavíš na 1ms tak se k 1ms ani zdaleka nepřibližuje a pomocí toho že
jsem tam dal ten Thread.Sleep(1) tak jsem 1ms dosáhl (aspoň myslím).
Stáhni si ten projekt a uvidíš rozdíl v timeru a Thread.Sleepu...
Jinak k tomu vláknu:::
Additional information: Operace mezi vlákny není platná: Přístup k
ovládacímu prvku pb proběhl z jiného vlákna než z vlákna, v rámci
kterého byl vytvořen.
Tohle bez znalosti vláken nepůjde. Pak se tedy v příslušné sekci nauč používat vlákna, načež jednoduše uspi odnož, místo hlavního vlákna.
Takže získat 1ms interval jiným způsobem než tímhle nejde?
Jde, jen ne v C# - to je vyšší jazyk, který nedokáže využít strojového časovače. (Místo toho se napíchne na nějakou službu/démona.) Však si projdi tu sekci o vláknech a pak vytvoř vlákno, které uspíš na 1ms - nevidím problém...
Dobře dík tohle mě zajímalo a nakonec jsme k tomu došli
na ty vlákna se podívám a
zkusím to tak udělat.Jinak co se vlastně vyvíjí v C#? Má dost věcí
který se v něm nedaj udělat, neumí pořádně využít výkon CPU, pomocí
DotPeeks se dekompiluje pomocí jednoho kliknutí...
Naopak C# je na svou vysokou úroveň přijatelně výkonné.O něco rychejší je jen Java. (krom startu) Jde v něm vše, jako v každém jiném jazyce. Vždy jde jen o kompilátor, interpret... COSMOS, SharpOS - operační systémy. ASP + .NET = ASP.NET - 90% lidí píše v C#. WebSockets konzole - 40% C#. Atd. Stejně tak v LISPu, v K, D, J#, X++, Chef, LOLCODE, 4FUCK, Euro, Lolololo, AAAAAAAAAAAAAA!!!!, [], Fish, 4., (whitespace) atd. V jakémkoliv esoterickém, či jiném jazyce jde teoreticky vše. Jen jsou některé jazyky vhodnější na ... Jiné nejsou vhodné pro ... Ale vždy je to jen o vůli, ochotě, schopnostech...
Zkus se podívat na komponentu "Backgroundworker", to je řešení tvého
problému. Jednoduše tím pustíš operaci v jiném vlákně( jako na pozadí)
a jinak aplikace funguje bez problémů i po dobu "té" operace.
Na mstv.cz je i videonávod na použití této komponenty
Uh, máte tu v diskuzi spoustu nepřesností, nejasností a přímo i věcí, co neplatí, tak vám v tom zkusím udělat pořádek:
Do toho cyklu přidej kód
Application.ProcessMessages();
Matyáš Černohous :
Vytvářet vlákno, co má jen něco dělat s GUI formuláře je zbytečné,
stejně nemůžeš přímo z toho vlákna šahat na formulář.
RickettsialPox :
Pozor, neplést http://msdn.microsoft.com/…vs.110).aspx a http://msdn.microsoft.com/…vs.110).aspx
Timer z timers má svoje vlákno, zatímco Timer z Forms (který se běžně
používá) svoje vlákno nemá a vše spouští v hlavním vlákně
formuláře.
K intervalu Timeru: Tick Timeru je vyvoláván přerušením procesoru, je to defaultně cca 15ms (dá se to změnit, ale nepoužívá se to), takže Timer má prostě omezenou přesnost, pod kterou se nedostaneš.
RickettsialPox :
"Jde, jen ne v C# - to je vyšší jazyk, který nedokáže využít strojového
časovače. (Místo toho se napíchne na nějakou službu/démona.) Však si
projdi tu sekci o vláknech a pak vytvoř vlákno, které uspíš na 1ms -
nevidím problém..."

Samozřejmě, že v C# jde využít vyšší přesnost, buďto přes DateTime.Ticks, třídu StopWatch nebo přinejhorším můžeš využít WINAPI a použít QueryPerformanceCounter.
Šeryx :
"Jinak co se vlastně vyvíjí v C#?"
V podstatě všechno kromě OS a driverů (resp. i to by šlo, ale musel bys
nejdřív v jiném jazyce si pro to napsat loader).
RickettsialPox :
"O něco rychejší je jen Java."
Na Windows bych si dokonce troufal tvrdit, že je v průměru celkově o něco málo rychlejší C#.
Ahoj co jsem já zjistil tak:
Application.ProcessMessages();
(v Delphi) je v C#:
Application.DoEvents();
jinak "Však si projdi tu sekci o vláknech a pak vytvoř vlákno, které
uspíš na 1ms - nevidím problém..." žádnou sekci o vláknech v C# jsem tu
nenašel.
A když jsem s
těmi vlákny něco zkoušel dělat tak mne to do Formu nepustí ani posunout
nějakou kontrolku takže to buď dělám špatně, nebo to není řešení.
Protože nemůžeš z jednoho vlákna šahat na proměnné druhého vlákna.
Jj, dělá to v podstatě to samé, dřív jsem dělal v Delphi, tak jsem
napsal omylem tu verzi z Delphi, ale jinak to dělá to samé
.
WinFormy (V C#, Delphi i třeba C++) fungují tak, že když máš třeba na formu událost OnMouseMove a pohneš nad ním myší, tak Windows pošle tvojí aplikaci zprávu, že se pohlo myší a až se tahle zpráva zpracuje, tak se teprve spustí událost OnMouseMove.
Form běží ve vlastním vláknu a tu frontu událostí zpracovává automaticky ve volné chvíli a nebo právě pokud zavoláš DoEvents().
Pokud je nějaká tvá funkce delší, tak v tu chvíli form provádí tvůj kód a nemůže tedy zpracovávat tu front zpráv.
K těm vláknům - jak jsem psal výše, v diskuzi tu bylo pár nepřesností a vytvářet druhé vlákno jen kvůli ovládání GUI nemá moc smysl, protože stejně z jiných vláken nemáš na to GUI přístup.
Jan Vargovský : Jen to upřesním, mezi vlákny samozřejmě na proměnné šahat můžeš, ale zrovna u GUI je to složitější - právě kvůli tomu, že je tam spousta věcí řešena přes ty zprávy.
Zobrazeno 17 zpráv z 17.