abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

    dnes 12:44 | Nová verze

    Tor Browser, tj. fork webového prohlížeče Mozilla Firefox s integrovaným klientem sítě Tor přednastavený tak, aby přes tuto síť bezpečně komunikoval, byl vydán ve verzi 16.0. Postaven je na Firefoxu ESR 153. Vydána byla také nová verze 7.16 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. S Tor Browserem 16.0.

    Ladislav Hagara | Komentářů: 0
    dnes 04:00 | Nová verze

    FreeTube, desktopový klient pro YouTube využívající lokální API, byl vydán ve verzi 0.26.0. Toto velké opravné vydání mj. vrací částečnou podporu živých přenosů nebo přepracovává zobrazování titulků a obecně nastavení videa v přehrávači – FreeTube umožňuje např. přehrávat video s větším zrychlením.

    ʚĭɞ 🍉 | Komentářů: 0
    dnes 03:55 | Humor

    Další vlna kyberútoků zasáhla chladicí zařízení supermarketů v sedmi evropských zemích, Belgii, Lucembursku, Švédsku, Nizozemsku, Irsku, Estonsku a Finsku. Mrazáky se v některých prodejnách opět 'proměnily v trouby' a zahřály až na 50°C, což pochopitelně vedlo ke znehodnocení uskladněných potravin. Útoky navazují na podobný incident ve Francii z první poloviny října letošního roku, pachatel stále není znám.

    👻 | Komentářů: 8
    včera 17:52 | Zajímavý projekt
    WorldTUI je experimentální LLM o 360 milionech parametrů, který napodobuje terminál. Podle stisknutých kláves se snaží předpovídat změny na obrazovce a zvládá tak vyonávat rozličné příkazy, například Vim, tmux i jednoduchou hru Snake. Nejedná se o skutečný příkazový řádek, jeho 'soubory' i příkazy jsou pouze simulované a model může samozřejmě různě chybovat. WorldTUI vychází z jazykového modelu Qwen2.5-Coder-0.5B, který autor … více »
    👻 | Komentářů: 2
    včera 17:48 | Zajímavý článek
    Josef Bacik navrhuje novou abstrakci cell, která by celý kontejner reprezentovala jako jeden kernelový objekt. Proces by vznikl přímo uvnitř cell a nemohl by ji opustit. Oprávnění ke správě by se odvozovala od držení cellfd. … více »
    vencour | Komentářů: 10
    včera 16:23 | Bezpečnostní upozornění

    Zranitelnost v aktualizačním mechanismu WordPress umožňuje útočníkovi zasáhnout do dočasného instalačního adresáře během aktualizace jádra systému. Před aktualizací veřejně dostupného WordPressu dočasně zablokovat HTTP přístup k wp-content/upgrade/, následně aktualizovat a zkontrolovat logy. Postižené verze: WordPress 4.7 až 7.1.3.

    vencour | Komentářů: 0
    včera 16:11 | Bezpečnostní upozornění

    Alpine Linux zveřejnil podrobnosti o útoku na svůj GitLab a 30. října oznámil obnovení provozu. Útočník se 20.–21. října pokusil zneužít chybu v regulárních výrazech. Exploit způsobil opakované pády workerů a několikrát se dostal do pokročilé fáze. Úspěšné spuštění kódu však nebylo potvrzeno. Fix: Opravený GitLab a současně Ruby 3.3.13, 3.4.12 nebo 4.0.9+, pokud jde o vlastní sestavení či kontejner.

    vencour | Komentářů: 0
    včera 15:44 | Pozvánky

    Konference OpenAlt 2026 proběhne tento víkend 7. a 8. listopadu na FIT VUT v Brně. Jedná se již o 21. ročník této konference, která propojuje otevřené technologie, svobodný software, hardware a lidi, kteří chtějí věci nejen používat, ale také jim rozumět a měnit je k lepšímu. Více o konferenci v příspěvku OpenAlt 2026: technologie, které dávají svobodu na blogu spolku OpenAlt.

    Ladislav Hagara | Komentářů: 0
    včera 15:22 | IT novinky

    Eben Upton oznámil další zdražení jednodeskových počítačů Raspberry Pi. Tentokrát 16 GB varianty Raspberry Pi o 80 dolarů a 16 GB varianty Raspberry Pi Compute Module 5 o 40 dolarů. Cena Raspberry Pi 500+ se nemění.

    Ladislav Hagara | Komentářů: 0
    včera 15:11 | IT novinky

    Francouzské Národní shromáždění přijalo 30. října 2026 poměrem 11 hlasů pro, 10 proti a 14 abstencí pozměňovací návrh I-1358 ke státnímu rozpočtu na rok 2027, který zavádí daň z objemu dat doručovaných uživatelům internetu. Návrh socialistického poslance Laurenta Lhardita stanovuje sazbu 0,055 eura za gigabajt, tedy 55 eur za terabajt. Zatím nejde o platný zákon, ale o dílčí hlasování během prvního čtení rozpočtu. Daň by měli platit

    … více »
    vencour | Komentářů: 12
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (20%)
     (30%)
     (9%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2969 hlasů
     Komentářů: 34, poslední 26.10. 08:24
    Rozcestník

    Dotaz: Problém s časovou smyčkou (while)

    24.11.2016 07:19 Coorey | skóre: 2
    Problém s časovou smyčkou (while)
    Přečteno: 436×
    Ahoj, mám takový problém s časováním smyčky. Jde o to, že potřebuji zavolat funkci na zrhuba určitý čas v rozmezí 3-50 sekund. K časování využívám systémovou funkci tzv. CurrentTick(), která do proměnné uloží čas v ms. Problém je, že při přetečení čísla 65536 (65s) začne počítat znova od 0. Navíc nelze restartovat - nebo aspoň nevím jak.

    Problém jsem "vyřešil" následovně, ale sem tam nastane chyba a funkci vrátí okamžitě. Nevím kde je chyba.

    void funkce1(int chTime) // chTime - jak dlouho má cykl běžet. { unsigned int t0 = CurrentTick(); // začatek cyklu - neměnná hodnota unsigned int t1 = CurrentTick(); // aktuální doba cyklu unsigned int overFlow = 0; // detekuje přeteceni CurrentTick

    while((t0+chTime)>(t1+overFlow)) { // ZDE BUDE KÓD, KTERÝ CHCI ČASOVAT // 1 CYKLUS MŮŽE TRVAT AŽ 2s

    t1=CurrentTick(); // aktualizace času smyčky - "aktuální čas" if(t1 < t0) // kontrola proti přetečení { overFlow = 65535; } } }

    Odpovědi

    24.11.2016 07:36 Coorey | skóre: 2
    Rozbalit Rozbalit vše Re: Problém s časovou smyčkou (while)
    Příloha:
    Za ten paskvil ve formátování se omlouvám. Přidám radši fotku do přílohy.

    24.11.2016 07:45 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Problém s časovou smyčkou (while)

    time(2), gettimeofday(2), alarm(2), setitimer(2), …

    Ten kód je celkově dost problematický, není třeba jasné, kde přesně se vzala magická konstanta 65535 (není to spíš 65536?) a počítá se jen s jedním přetečením. Pokud "vrátí okamžitě" znamená, že se cyklus neprovede ani jednou, šlo by to vysvětlit např. tím, že překladač prohodil pořadí těch dvou inicializací a t1 se inicializovala na 65535, ale t0 už na nulu. V každém případě je nesmysl na začátku CurrentTick() (Co to vůbec je? Standardní systémová funkce určitě ne.) volat dvakrát, spíš použijte pro t1 hodnotu, kterou už máte v t0.

    24.11.2016 07:57 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Problém s časovou smyčkou (while)
    šlo by to vysvětlit např. tím, že překladač prohodil pořadí těch dvou inicializací

    Nejspíš nešlo. Tím, že je tam volání funkce, tak to udělat nemůže. Jedině že by ta funkce byla inline a prováděla něco jako čtení z nějaké globální proměnné, kterou cosi na pozadí aktualizuje.

    Na druhou stranu si lze snadno představit, jak by cyklus neskončil nikdy: pokud se t0 inicializuje na nulu, podmínka "t1 < t0" nebude nikdy splněná a přetečení nedetekujete.

    24.11.2016 09:12 Coorey | skóre: 2
    Rozbalit Rozbalit vše Re: Problém s časovou smyčkou (while)
    Ano, správně tam má být 65536.

    Ohledně toho CurrenTick() - tohle je programované pro řídicí jednotku robota. Prostě mi vrací dobu trvání v ms. Je dost možný, že to funguje jak ty říkáš, že to provádí jen čtení z nějaké té globální proměnné, ale v principu by to nemělo vadit. Nicméně bohužel nic lepšího použít nemůžu (žádné standardní knihovny nemam k dispozici).

    To rozmezí ve, kterém chci časovat je max 50... takže nepočítám přetečení 2x.

    Kdyby se t0 inicializovalo na 0 (což je pouze před započetím časového cyklu), vůbec by to nevadilo, vlastně by to byl ideální případ. Jelikož max časování je jak jsem psal 50 sekund.
    24.11.2016 09:40 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Problém s časovou smyčkou (while)
    ale v principu by to nemělo vadit

    Může, protože pak překladači nic nebrání ty dvě inicializace prohodit. Proto existují věci jako bariéry, abyste mu v tom zabránil. V každém případě ale není sebemenší důvod při inicializaci tu funkci volat dvakrát, prostě použijte stejnou hodnotu pro obě proměnné, je to jednodušší a nebudete riskovat překvapení.

    Kdyby se t0 inicializovalo na 0 (což je pouze před započetím časového cyklu), vůbec by to nevadilo, vlastně by to byl ideální případ. Jelikož max časování je jak jsem psal 50 sekund.

    Holt si asi každý musí natlouct sám, aby pochopil, jakou trvanlivost tyhle skryté předpoklady mají a jak nepříjemné je pak hledat chyby, které se začnou objevovat, když jednoho dne přestanou platit (v době, kdy už jste dávno zapomněl, kde všude jste to předpokládal). Pokud mermomocí trváte na tom, že to nechcete napsat pořádně, tak aspoň kontrolujte ten argument, ať aspoň víte proč, až to "bouchne".

    24.11.2016 10:52 Coorey
    Rozbalit Rozbalit vše Re: Problém s časovou smyčkou (while)
    No jestli vážně překladač to může vzít v pořadí: t1 a až pak t0. Docela by to vysvětlovalo proč to někdy skončí okamžitě. Díky, tohle by mě nikdy nenapadlo.

    No uznávám, že lepší by bylo if(t1 <= t0) a následně overFlow inkrementovat o 65536 kvůli vícenásobnému přetečení.
    24.11.2016 11:02 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Problém s časovou smyčkou (while)
    Tím si nepomůžete, protože jestli cyklus může trvat 2 sekundy, můžete se jedním skokem dostat až skoro na 2000. Vás přece nezajímá, jestli je nová hodnota menší než t0, pro vás je spíš důležité, jestli je menší než minulá hodnota t1 (pokud se můžeme spolehnout, že vám to během jednoho cyklu nenaskočí o 65536 a víc).
    24.11.2016 09:43 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Problém s časovou smyčkou (while)

    Ještě jedna praktická rada:

    Ohledně toho CurrenTick() - tohle je programované pro řídicí jednotku robota.

    Pokud se dotaz týká nějakého velmi specifického prostředí, kde nelze použít běžné nástroje a obraty, je dobré na to hned na začátku upozornit.

    24.11.2016 15:57 .
    Rozbalit Rozbalit vše Re: Problém s časovou smyčkou (while)
    Pokud použiješ 16-bitovou proměnnou, tak se ti bude protáčet stejně jako ten timer a rozdíl bude sedět (65535 + 1 = 0, 0 - 65535 = 1).
    uint16_t t0 = CurrentTick();
    while (chTime > 0)
    {
    	...
    	
    	uint16_t t1 = CurrentTick();
    	chTime -= t1 - t0;
    	t0 = t1;
    }
    
    25.11.2016 00:25 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Problém s časovou smyčkou (while)

    Nějak divně tam inicializuješ ty časové proměnné. Když si normálně v běžném userspace naimplementuju CurrentTicks(), daří se mi to vyzkoušet takhle:

    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <inttypes.h>
    
    static const size_t BILLION = 1000000000;
    static const size_t MILLION = 1000000;
    static const uint32_t TIME_MASK = 0xffff;
    static const uint32_t TIME_MAX = TIME_MASK + 1;
    static const struct timespec PAUSE = {
      .tv_sec = 0,
      .tv_nsec = 500000000,
    };
    
    static uint32_t CurrentTick() {
      struct timespec ts;
      if (clock_gettime(CLOCK_MONOTONIC, &ts)) {
        perror("clock error");
        exit(1);
      }
      const uint64_t ns = (uint64_t)ts.tv_sec * BILLION +
                          (uint64_t)ts.tv_nsec;
      return (uint32_t)(ns / MILLION) & TIME_MASK;
    }
    
    static void funkce1(int chTime) {
      if (chTime > 0) {
        uint32_t t0 = CurrentTick();
        do {
    
          /* Tady začíná časovaný kód. */
          printf("\tZbývá: %d ms, CurrentTick: %u ms\n", chTime, t0);
          struct timespec remaining;
          if (nanosleep(&PAUSE, &remaining))
            while (nanosleep(&remaining, &remaining));
          /* Tady končí časovaný kód. */
    
          const uint32_t t1 = CurrentTick();
          chTime -= t1 > t0 ? t1 - t0 : TIME_MAX - t0 + t1;
          t0 = t1;
        } while (chTime > 0);
      }
    }
    
    int main() {
      const int times_sec[] = {1, 2, 4, 8, 16, 32, 64, 65, 66, 99};
      for (size_t i = 0; i < sizeof(times_sec) / sizeof(int); ++i) {
        printf("Spouštím časovač na %d s.\n", times_sec[i]);
        funkce1(1000 * times_sec[i]);
      }
      return 0;
    }
    

    Tohle^^^ si můžeš rovnou spustit, sledovat, kdy čas přeteče, a zkoušet různé alternativy. Klíčové je, jak se v tom cyklu aktualizuje uplynulý čas.

    Pokud by jedna iterace toho časovacího kódu trvala déle než 65536 milisekund, bude samozřejmě tohle řešení nepoužitelné a časování by se muselo řešit jinak.

    Založit nové vlákno • Nahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.