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 05:55 | Komunita

Dries Buytaert, autor a vedoucí projektu Drupal a prezident Drupal Association, požádal soukromě před několika týdny Larryho Garfielda, jednoho z klíčových vývojářů Drupalu, aby projekt Drupal opustil. Larry Garfield minulý týden na svých stránkách napsal, že důvodem jsou jeho BDSM praktiky a rozpoutal tím bouřlivou diskusi. Na druhý den reagoval Dries Buytaert i Drupal Association. Pokračuje Larry Garfield [reddit].

Ladislav Hagara | Komentářů: 7
dnes 04:44 | Humor

Společnost SAS zveřejnila na svých stránkách studii s názvem Open Source vs Proprietary: What organisations need to know (pdf). Organizace by měly například vědět, že ideální je mix 40 % open source softwaru a 60 % proprietárního softwaru [Slashdot].

Ladislav Hagara | Komentářů: 3
včera 23:33 | Zajímavý software

Byl vydán ShellCheck ve verzi 0.4.6. Jedná se o nástroj pro statickou analýzu shellových skriptů. Shellové skripty lze analyzovat na webové stránce ShellChecku, v terminálu nebo přímo z textových editorů. Příklady kódů, na které analýza upozorňuje a doporučuje je přepsat. ShellCheck je naprogramován v programovacím jazyce Haskell. Zdrojové kódy jsou k dispozici na GitHubu pod licencí GPLv3.

Ladislav Hagara | Komentářů: 0
včera 23:33 | Pozvánky

Czech JBoss User Group zve na setkání JBUG v Brně, které se koná ve středu 5. dubna 2017 v prostorách Fakulty informatiky Masarykovy univerzity v místnosti A318 od 18:00. Přednáší Pavol Loffay na téma Distributed Tracing and OpenTracing in Microservice Architecture.

… více »
mjedlick | Komentářů: 0
včera 11:33 | Zajímavý článek

Národní centrum kybernetické bezpečnosti (NCKB) vypracovalo (pdf) 26 podrobných bezpečnostních doporučení pro síťové správce. Tato doporučení jsou nastavena tak, aby je bylo možné aplikovat v každé instituci. Jsou rozdělena na tři základní části: bezpečnost infrastruktury, bezpečnost stanic a serverů a bezpečnost uživatelů.

Ladislav Hagara | Komentářů: 13
včera 05:55 | Komunita

Prezident Nadace pro svobodný software (FSF) Richard M. Stallman vyhlásil na slavnostním ceremoniálu v rámci konference LibrePlanet 2017 vítěze Free Software Awards za rok 2016. Ocenění za společenský přínos získal SecureDrop (Wikipedie). Za rozvoj svobodného softwaru byl oceněn Alexandre Oliva (Wikipedie).

Ladislav Hagara | Komentářů: 0
včera 04:44 | Nová verze

Byla vydána verze 0.7.0 debugovacího nástroje cgdb. Mezi novinky patří například zvýrazňování syntaxe jazyka Rust. Podrobnosti v poznámkách o vydání.

Neel | Komentářů: 0
25.3. 22:00 | Komunita

Portál Stack Overflow po roce opět vyzpovídal své uživatele, jedná se především o vývojáře softwaru, a zveřejnil (podcast) detailní výsledky průzkumu. Průzkumu se letos zúčastnilo více než 64 tisíc vývojářů. Jejich nejmilovanější platformou je linuxový desktop. Ten je také druhou nejpoužívanější platformou vývojářů.

Ladislav Hagara | Komentářů: 7
24.3. 11:55 | Komunita

Vývojový tým OpenSSL ve spolupráci s iniciativou Core Infrastructure konsorcia Linux Foundation spustil proces přelicencování této kryptografické knihovny ze současné licence na licenci Apache Licence v 2.0 (ASLv2). Nová licence usnadní začleňování OpenSSL do dalších svobodných a open source projektů. Všichni dosavadní vývojáři OpenSSL (Authors) obdrží v následujících dnech email s prosbou o souhlas se změnou licence.

Ladislav Hagara | Komentářů: 32
24.3. 01:11 | Komunita

Před třemi týdny Mozilla.cz představila projekt Photon, jehož cílem je návrh a implementace nového vzhledu Firefoxu. Včera zveřejnila první náhled vzhledu Photon. Práce na projektu Photon jsou rozděleny do pěti týmů, které celkem čítají 19 lidí. Zaměřují se na zlepšení prvního spuštění Firefoxu a zaujetí nových uživatelů, celkovou úpravu vzhledu, zlepšení animací, zrychlení odezvy uživatelského rozhraní a také upravení nabídek. Vývoj lze sledovat v Bugzille.

Ladislav Hagara | Komentářů: 50
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (14%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 948 hlasů
 Komentářů: 72, poslední 1.3. 11:16
    Rozcestník

    Dotaz: C++ pthread a trida - problem s vytvorenim vlakna

    29.11.2008 16:17 Tomáš Skočdopole | skóre: 13
    C++ pthread a trida - problem s vytvorenim vlakna
    Přečteno: 2117×

    Ahoj,

    v souvislosti s diskuzi Metody pristupu na seriovy port v C jsem se rozhodl resit to pres vlakna. Chtel jsem to udelat tak, ze by kazda instance tridy vytvorila dve vlakna - jedno pro RX, druhe pro TX.

    Bohuzel jsem narazil na problem nevim jak vytvorit vlakno, ktere se vytvori s "main" funkci, ktera je metodou dane tridy: 

    Udelal jsem jednoduchy example:

    trida.h

    #ifndef _TRIDA_H_
    #define _TRIDA_H_

    #include <iostream>
    #include <pthread.h>

    using namespace std;

    class my_class
    {
        public:
        my_class(void);
      
        private:
        void* my_thread_main(void*);
      
        pthread_t my_thread_tid;
    };


    #endif // _TRIDA_H_

     

    trida.cpp


    #include "trida.h"

    my_class::my_class (void)
    {
        cout << "Hello from my_class!";
      
        pthread_create(&(this->my_thread_tid),
                       NULL,
                       &(this->my_thread_main),
                       NULL);

        return;
    }

    my_class::~my_class (void)
    {
        /* pthread_join() */
      
        return;
    }

    void * my_class::my_thread_main (void *) {
      
        cout << "Hello from my_thread_main!";
      
        return(0);
    }

    test.cpp


    #include <iostream>
    #include "trida.h"

    using namespace std;

    int main (int argc, char **argv)
    {
        my_class example;
      
        cout << "Hello from main!\n";
      
        return (0);
    }

     

    Pri prekladu dostanu toto:

    g++ -c trida.cpp -o trida.o
    trida.cpp: In constructor ‘my_class::my_class()’:
    trida.cpp:9: error: ISO C++ forbids taking the address of a bound member function to form a pointer to member function.  Say ‘&my_class::my_thread_main’
    trida.cpp:10: error: cannot convert ‘void* (my_class::*)(void*)’ to ‘void* (*)(void*)’ for argument ‘3’ to ‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)’
    trida.cpp: At global scope:
    trida.cpp:15: error: definition of implicitly-declared ‘my_class::~my_class()’
    make: *** [trida.o] Error 1

     

    Dekuji vsem za pomoc! Tomas

    Odpovědi

    Bluebear avatar 29.11.2008 16:28 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna

    V prvé řadě: IMHO není vůbec dobrý nápad dělat komunikaci přes port tak, že jedno vlákno posílá a druhé přijímá. Možná se mýlím, ale myslím, že to bude strašný bordel.

    Metodu třídy my_main() máš deklarovanou jako metodu třídy my_class. Volání pthread_create() očekává ukazatel na funkci, ale ty se snažíš mu předat metodu třídy - to nemůžeš udělat, protože metoda třídy očekává navíc ukazatel na "this", který jí nemáš jak předat.

    Fungovalo by to, kdyby byla metoda my_main() deklarována jako statická, a ukazatel na příslušný objekt my_class bys jí předával explicitně; potom můžeš tento ukazatel předat jako "uživatelská data" skrz volání pthread_create() a vymalováno.

    To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
    Bluebear avatar 29.11.2008 16:34 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna

    Jo: zkus se inspirovat nějakou už hotovou C++ knihovnou.

    Jako příklad se mrkni třeba na to, jak je udělaná třída QThread z Qt. Není to nijak těžké, jen je třeba udělat ten taneček okolo předávání pointeru na objekt.

    To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
    29.11.2008 17:10 Tomáš Skočdopole | skóre: 13
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna

    No ale jak lze tedy efektivne resit pristup k portu? Kdyz select nelze pouzit protoze chci behem prijimani a odesilani delat neco jineho a ne cekat na data od portu.

    Potrebuji totiz soubezne zpracovani dat na seriovem portu a provadeni jineho kodu.

    Pokud by ale byla metoda staticka, tak to by znamenalo, ze by vsechny instance tridy meli tuto metodu spolecnou.

    Ale ja bych chtel aby kazdy seriovy port mel sve dve vlakna.

    Josef Kufner avatar 30.11.2008 03:51 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna
    select() má timeout (poslední parametr) a ten může být nulový (nikoliv nullový).
    Hello world ! Segmentation fault (core dumped)
    ava avatar 30.11.2008 14:46 ava | skóre: 10
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna

    Napis co vlastne potrebujes udelat (co ma ta aplikace delat kdyz se zrovna nepristupuje k seriaku), a myslim ze by bylo dobre zamyslet se nad tim jestli by to neslo resit jen s jednim vlaknem a neblokujicim ctenim, ve vetsine pripadu to jde a je to lepsi reseni nez s pomoci vlaken.

    Press any key to continue, or any other key to cancel
    Josef Kufner avatar 30.11.2008 04:03 Josef Kufner | skóre: 67
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna
    Koukni se na mého krtečka... Byla to mimojiné i semestrálka z x36osy na téma "Chceme vlákna a chceme jich mooooooooc.". Zejména tě budou zajímat soubory thread.(cc|h) -- obsahují třídu, kterou si zdědíš, implementuješ main() a už jen vyrábíš co instance, to vlákno. Ale pozor, ty vlákna se s tím vyrábějí až nebezpečně lehce, tak se nezamotej :-D

    ... btw, nechce ovládání krtka někdo naportovat do tuxánků nebo zatacky? Mohlo by pak u jednoho počítače hrát několik dalších hráčů -- používali by jeden mikrofon a tůůůů, hůůůů, tůůůůůůů, pííííísk.
    Hello world ! Segmentation fault (core dumped)
    30.11.2008 10:04 vencas | skóre: 32
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna

    Pripojuji se v tom smyslu, že dělat vlákna přes pthreads je v c++ zbytečná dřina. Osobně bych doporučil www.boost.org/doc/html/thread.html .

    Luboš Doležel (Doli) avatar 30.11.2008 13:07 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna
    Zapojovat Boost (který zas jen zavolá pthreads) do jednoduchého programu mi zase přijde overkill.
    elviin avatar 30.11.2008 21:08 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna

    Pokud bude delat jen jeden programek v C++ tak je to overkill, pokud se tim bude dlouhodobe zabejvat, tak boost je jasna volba.

    30.11.2008 22:34 vencas | skóre: 32
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna

    Přibere tím závislost navíc, ale co se týče čitelnosti kódu (a přenositelnosti, ale to je v tomto případě asi jedno), tak tím myslím získá.

    8.12.2008 12:14 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: C++ pthread a trida - problem s vytvorenim vlakna
    Potřebujete to jen obalit do statické funkce, něco takového:
    #ifndef _TRIDA_H_
    #define _TRIDA_H_
    
    #include <iostream>
    #include <pthread.h>
    
    using namespace std;
    
    class my_class
    {
    public:
        my_class(void);
      
    private:
        static void* _entry(void*);
        void* main();
      
        pthread_t _id;
    };
    
    
    #endif // _TRIDA_H_
    
    my_class::my_class (void)
    {
        cout << "Hello from my_class!";
      
        pthread_create(&(this->_id), NULL, &_entry, NULL);
    
        return;
    }
    
    my_class::~my_class (void)
    {
        /* pthread_join() */
      
        return;
    }
    
    void* my_class::_entry (void* data)
    {
      my_class* thread = (my_class*)data;
      return thread->main();
    }
    
    void *my_class::main()
    {
        cout << "Hello from my_thread_main!";
      
        return(0);
    }
    

    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.