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 15:33 | IT novinky

    Po 26 letech od protiprávního policejního zásahu, který byl spuštěn na základě podnětu společnosti Microsoft, Obvodní soud pro Prahu 2 rozsudkem potvrdil, že Mironet prokázal významnou část svého nároku na náhradu škody vůči Ministerstvu spravedlnosti ČR. Soudem nyní přiznaná část nároku znamená rekordní odškodné, jaké kdy české soudy přiznaly za nesprávný postup státu. Spor byl rozdělen na několik škod, u pravomocně uzavřených částí

    … více »
    Ladislav Hagara | Komentářů: 9
    dnes 15:22 | Nová verze

    Lehké desktopové prostředí LXQt bylo vydáno ve verzi 2.4.0. Jde o převážně opravné vydání s drobnými vylepšeními podpory Waylandu.

    |🇵🇸 | Komentářů: 0
    dnes 12:44 | IT novinky

    Počítačová hra Kingdom Come: Deliverance 2 českého studia Warhorse získala cenu BAFTA v kategorii nejlepší příběh. V konkurenci pěti dalších nominovaných děl porazila i úspěšnou francouzskou hru Clair Obscur: Expedition 33, která v letošním ročníku získala cenu za nejlepší hru roku.

    Ladislav Hagara | Komentářů: 1
    dnes 12:22 | Komunita

    Projekt KDE oslaví v říjnu 30 let. Matthias Ettrich poslal 14. října 1996 do diskusní skupiny comp.os.linux.misc zprávu, která započala historii projektu. Důležité milníky jsou zobrazeny na časové ose KDE.

    Ladislav Hagara | Komentářů: 1
    dnes 02:55 | Komunita

    Byly vyhlášeny výsledky letošní volby vedoucí/ho projektu Debian (DPL, Wikipedie). Poprvé povede Debian žena. Novou vedoucí je Sruthi Chandran. Letos byla jedinou kandidátkou. Kandidovala již v letech 2020, 2021, 2024 a 2025. Na konferenci DebConf19 měla přednášku Is Debian (and Free Software) gender diverse enough?

    Ladislav Hagara | Komentářů: 15
    dnes 00:55 | Nová verze

    Byla vydána nová verze 10.3 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Přidána byla podpora Orange Pi 4 LTS. Přibyl balíček Prometheus.

    Ladislav Hagara | Komentářů: 0
    včera 18:55 | Nová verze

    Implementace VPN softwaru WireGuard (Wikipedie) pro Windows, tj. WireGuard pro Windows a WireGuardNT, dospěly do verze 1.0.

    Ladislav Hagara | Komentářů: 2
    včera 16:11 | IT novinky

    V Pekingu dnes proběhl 2. ročník půlmaratonu humanoidních robotů. První 3 místa obsadili roboti Honor Lightning v různých týmech. Nový rekord autonomního robota je 50 minut a 26 sekund. Operátorem řízený robot to zvládl i s pádem za 48 minut a 19 sekund. Řízení roboti měli časovou penalizaci 20 %. Před rokem nejrychlejší robot zvládl půlmaraton za 2 hodiny 40 minut a 42 sekund. Aktuální lidský rekord drží Jacob Kiplimo z Ugandy s časem 57 minut a 20 sekund [𝕏].

    Ladislav Hagara | Komentářů: 5
    17.4. 17:11 | Zajímavý článek

    Stanislav Fort, vedoucí vědecký pracovník z Vlčkovy 'kyberbezpečnostní' firmy AISLE, zkoumal dopady Anthropic Mythos (nový AI model od Anthropicu zaměřený na hledání chyb, který před nedávnem vyplašil celý svět) a předvedl, že schopnosti umělé inteligence nejsou lineárně závislé na velikosti nebo ceně modelu a dokázal, že i některé otevřené modely zvládly v řadě testů odhalit ve zdrojových kódech stejné chyby jako Mythos (například FreeBSD CVE-2026-4747) a to s výrazně nižšími provozními náklady.

    MakeIranBombedAgain❗ | Komentářů: 6
    17.4. 12:44 | IT novinky

    Federální návrh zákona H.R.8250 'Parents Decide Act', 13. dubna předložený demokratem Joshem Gottheimerem a podpořený republikánkou Elise Stefanik coby spolupředkladatelkou (cosponsor), by v případě svého schválení nařizoval všem výrobcům operačních systémů při nastavování zařízení ověřovat věk uživatelů a při používání poskytovat tento věkový údaj aplikacím třetích stran. Hlavní rozdíl oproti kalifornskému zákonu AB 1043 a kolorádskému SB26-051 je ten, že federální návrh by platil rovnou pro celé USA.

    MakeIranBombedAgain❗ | Komentářů: 13
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (8%)
     (1%)
     (12%)
     (30%)
     (3%)
     (6%)
     (2%)
     (15%)
     (25%)
    Celkem 1364 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník

    Dotaz: select a jak ho vzbudit

    3.5.2009 00:36 Deleted [8409] | skóre: 14 | blog: darkblog
    select a jak ho vzbudit
    Přečteno: 252×
    Chtěl bych se zeptat, jakým způsobem se dá vzbudit select(), který čeká na X11.

    Mám následující kód:
    void EventPumpX11::waitForWork()
    {
      UISystemX11* uiSystem = UI_SYSTEM();
    
      int fd = uiSystem->_fd;
      int fdSize = fd + 1;
      fd_set fdSet;
    
      struct timeval tval;
      FD_ZERO(&fdSet);
      FD_SET(fd, &fdSet);
    
      TimeDelta delay = _delayedWorkTime - Time::now();
      if (delay > TimeDelta())
      {
        // Go to sleep. X11 will wake us to process X events. We also set interval
        // to wake up if there are planned tasks to specific time (Timers).
        int64_t udelay = delay.inMicroseconds();
        tval.tv_sec = (int)(udelay / 1000000);
        tval.tv_usec = (int)(udelay % 1000000);
        if (tval.tv_usec <= 100) tval.tv_usec = 100;
    
        int ret = ::select(fdSize, &fdSet, NULL, NULL, &tval);
        // TODO: Check for select result
      }
      else
      {
        // It looks like delayedWorkTime indicates a time in the past, so we
        // need to call doDelayedWork now.
        _delayedWorkTime = Time();
      }
    }
    
    kde fd je deskriptor, který jsem obdržel pomocí ConnectionNumber(Display*) (Xlib). O co mi jde, potřeboval bych probudit event loop, když chci z jiného vlákna poslat událost do toho hlavního, které čeká buď na událost z X11 nebo na vypršení časového limitu potřebného pro jiné úkoly (delay).

    Myslím, že správná cesta bude vytvořit vlastní file descriptor, na který pošlu 1 byte v případě, že budu chtít probudit event loop, ale nějak nevím jak přesně na to (toto jsem ještě nikdy nedělal). Použít fd_set a do masky dát vlastní fd?

    Stačí mi nakopnutí správným směrem ;)

    Odpovědi

    3.5.2009 03:41 joe
    Rozbalit Rozbalit vše Re: select a jak ho vzbudit
    Přesně tak, jen přidáš ten další deskriptor (nejlépe asi z pipe()) pomocí FD_SET(fd2, fdSet) a fdSize upravíš na max(fd, fd2) + 1 a po tom selectu otestuješ, na kterých deskriptorech jsou data pomocí FD_ISSET (i ten druhý deskriptor musíš vyprazdňovat). Samozřejmě se to dá přerušit třeba signálem, ale musí člověk přesně vědět, co všechno to může udělat. Přidání dalšího deskriptoru je nejčistší.
    3.5.2009 12:29 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: select a jak ho vzbudit
    díky, dopracoval jsem se k něčemu takovému:
    void EventPumpX11::waitForWork()
    {
      UISystemX11* uiSystem = UI_SYSTEM();
    
      int fd = uiSystem->_fd;
      int fdSize = fog_max(fd, uiSystem->_wakeUpPipe[0]) + 1;
      fd_set fdSet;
    
      struct timeval tval;
      struct timeval* ptval = NULL;
      FD_ZERO(&fdSet);
      FD_SET(fd, &fdSet);
      FD_SET(uiSystem->_wakeUpPipe[0], &fdSet);
    
      if (_delayedWorkTime.isNull())
      {
        // There are no scheduled tasks, so ptval is NULL and this tells to select()
        // that it should wait infitine time.
      }
      else
      {
        TimeDelta delay = _delayedWorkTime - Time::now();
    
        if (delay > TimeDelta())
        {
          // Go to sleep. X11 will wake us to process X events and we also set
          // interval to wake up to run planned tasks (usually Timers).
          int64_t udelay = delay.inMicroseconds();
          tval.tv_sec = (int)(udelay / 1000000);
          tval.tv_usec = (int)(udelay % 1000000);
          if (tval.tv_usec <= 100) tval.tv_usec = 100;
          ptval = &tval;
        }
        else
        {
          // It looks like delayedWorkTime indicates a time in the past, so we
          // need to call doDelayedWork now.
          _delayedWorkTime = Time();
          return;
        }
      }
    
      int ret = ::select(fdSize, &fdSet, NULL, NULL, ptval);
    
      if (ret < 0)
      {
        fog_debug("Fog::EventPumpX11::waitForWork() - select() failed (errno=%d).", errno);
      }
    
      if (ret > 0)
      {
        if (FD_ISSET(uiSystem->_wakeUpPipe[0], &fdSet))
        {
          // Dummy c, the actual value is out of our interest.
          uint8_t c;
          read(uiSystem->_wakeUpPipe[0], &c, 1);
          _wakeUpSent.cmpXchg(1, 0);
        }
      }
    }
    
    a Kód pro probuzen9 z jiiného vlákna vypadá takto:
    void EventPumpX11::sendWakeUp()
    {
      if (_wakeUpSent.cmpXchg(0, 1))
      {
        UISystemX11* uiSystem = UI_SYSTEM();
        uint8_t c = 'W';
    
        write(uiSystem->_wakeUpPipe[1], &c, 1);
      }
    }
    
    požil jsem atomické operace k tomu, abych do pipe neposílal příliš moc, teď tam je normálně jen ten 1 BYTE, který probudí select. Funguje to, ale samořejmě to může obsahovat chyby (zase tak moc jsem to neotestoval)...

    Ke kompletnosti ještě vytvoření pipe:
      // Create wakeup pipe.
      if (pipe(_wakeUpPipe) < 0)
      {
        fog_debug("Fog::UISystemX11::Can't create wakeup pipe");
        goto fail;
      }
    
    K zápisu používám _wakeUpPipe[1] a ke čtení _wakeUpPipe[0], doufám, že jsem to pochopil správně...:)

    Založit nové vláknoNahoru

    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.