Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » containerliste als Parameter in einen thread

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.03.2008, 11:25 Uhr
~studi83
Gast


Hallo zusammen,

Ich möchte gerne innerhalb eines threads (der sich in einer Klasse befindet) auf eine Containerliste zugreifen. Mein Code sieht folgendermassen aus:




C++:
class xy
{
..
        list <InputObject*> InputObjects;

        static void* ReaderThread(void *param );
..
}



void* xy::ReaderThread(void *param )
{

     list<InputObject*>::iterator iter;
     ....

}




Wie kann ich diese Liste als Parameter in den Thread einfügen und wie muss ich den genau starten?
Irgendwie in dieser Form?

C++:
pthread_create( &readerThreadId, NULL, ReaderThread, &InputObjects );




Vielen Danke im voraus

Viele Grüsse
Fabian

Dieser Post wurde am 04.03.2008 um 20:07 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.03.2008, 15:38 Uhr
xXx
Devil


Naja Threads sind gefährlich (wenn man nicht wirklich weiß wie man damit umgeht ...) aber du kannst es z.B. so machen:

C++:
class thread
{
    static void* _thread_func(void* ptr_this)
    { return ptr_this->on_thread(); }

    ::pthread_t m_identification;

protected:
    virtual void* on_thread() = 0;

public:
    thread()
    {
        if (::pthread_create(&m_identification, NULL, &thread::_thread_func, reinterpret_cast<void*>(this)) == 0) throw std::runtime_error("could not create thread");
    }
    ~thread()
    { ::pthread_exit(NULL); }

public:
    void join() const { if (::pthread_join(m_identification, NULL) == 0) throw std::runtime_error("thread could not join"); }
};



C++:
class render : public thread
{
protected:
    void* on_thread()
    {
        /* TODO: Do what ever you want */
    }
};

int main()
{
    render thread;
}
aber wie du siehst, kenn ich mich mit der pthread lib nicht so gut aus

Dieser Post wurde am 03.03.2008 um 15:39 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.03.2008, 19:09 Uhr
~zZz
Gast


Tjo der Code ist z.B. schonmal FALSCH.
Bau nach dem pthread_create ein sleep/delay/... ein, und du wirst sehen wie schön es den neuen Thread beim Aufruf von on_thread() zerreisst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.03.2008, 19:30 Uhr
0xdeadbeef
Gott
(Operator)


Naja, eigentlich zerreißt es den Thread vor allem, weil das Objekt in main direkt zerstört wird, und ohne Cast wird das Aufrufen von ptr_this sowieso nicht kompilieren.

Prinzipiell kann man das auf die Art schon machen, allerdings würde ich mir der Einfachheit halber, und um das Rad nicht zweimal zu erfinden, mal Boost.Thread ankucken.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.03.2008, 21:21 Uhr
xXx
Devil


Ja okay war auch nur ein einfaches Beispiel, um das vorgehen prinzipiel zu erklären
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: