🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #14993

Re: pthread in c++

#14993
From: Wim Dumon
Date: Wed, 06 Dec 2000 00:00
41 lines
1644 bytes
delirium wrote:
> 
> als ik multithreading wil doen met pthread.h,
> hoe kan ik dan als thread functie een memberfunctie van een c++-class
> gebruiken ?
> 

Dat kan je alleen met static member functions.

struct A
{
  static void *foo(void *);
};

pthread_create(a, b, A::foo, c);

Wanneer je een method van een welbepaalde class instantiation wil oproepen
moet je een wrapper functie (mag een static member functie zijn) schrijven:

struct A
{
  static void *pthread_entry(void *p)
  {
    reinterpret_cast<A *>(p)->entry();
    return 0;
  }
  void entry();
};

...
{
  A c; // Thread entry moet c.entry() zijn
  pthread_create(a, b, A::pthread_entry, &c);
}

De reden dat dit zo moet is dat de this pointer op de juiste manier op de
stack terecht moet komen. Er bestaan ook een hoop wrapper classes om
pthreads in C++ objecten te steken, misschien heb je daar iets aan ?

Groetjes,
Wim.
Technical Details
Message-ID: <3A2E7C06.686FDDCE@easics.be>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <3A2E7208.11982655@student.kuleuven.ac.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,c74e054707a478eb
X-Google-Attributes: gidfcea4,public
From: Wim Dumon <wim@easics.be>
Subject: Re: pthread in c++
Date: 2000/12/06
Message-ID: <3A2E7C06.686FDDCE@easics.be>
X-Deja-AN: 701835528
Content-Transfer-Encoding: 7bit
References: <3A2E7208.11982655@student.kuleuven.ac.be>
X-Accept-Language: en
Content-Type: text/plain; charset=us-ascii
X-Complaints-To: abuse@Belgium.EU.net
X-Trace: nreader1.kpnqwest.net 976124934 193.74.198.7 (Wed, 06 Dec 2000 18:48:54 MET)
Organization: Easics nv, Leuven, Belgium, http://www.easics.com
MIME-Version: 1.0
NNTP-Posting-Date: Wed, 06 Dec 2000 18:48:54 MET
Newsgroups: be.comp.programming