Ich lese hier gerade etwas von Plattformunabhängig. Pthreads gibt es auch für Windows, das stimmt. Es ist allerdings ein C-Bibliothek und man kann nicht wirklich elegant damit arbeiten, vor allem wenn man Parameter an die Funktion übergibt, oder wieder zurückwill. Mann muss dann immer mit Konvertierungen von void* arbeiten. Mein Vorschlag für dich: Boost::thread. Die Syntax ist fast wie pthreads, aber es ist sauber in Klassen gekapselt. Kuck es dir mal an:
http://www.highscore.de/cpp/boost/multithreading.html
Edit: Ich habe gerade festgestellt, dass man keine Rückgabewerte von einem Thread erhalten kann. Als Alternative kann man solche Werte in einem Klassenmember ablegen. Ich habe dir mal ein kleines Beispiel erstellt, das ziemlich genau das machen sollte, was du willst, allerdings mit Boost:
Code: Alles auswählen
#include <iostream>
#include <boost/thread.hpp>
#include <functional>
class test
{
public:
void loadMails()
{
std::cout << "I am the Thread" << std::endl;
sleep( 2 );
std::cout << "Threadtime is over now" << std::endl;
}
};
int main (void)
{
test tesT;
std::cout << "I am from the main function" << std::endl;
//starte Funktion als Thread->Für Memberfunktion ist bind nötig
boost::thread MyThread( std::bind( &test::loadMails, tesT));
//warte bis Thread beendet.
MyThread.join();
std::cout << "The Thread is finished" << std::endl;
return 0;
}
Einen Thread in einer Klasse zu kapseln und dann damit die eigenen Member aufzurufen ist nur mit statischen Membern möglich, die Gründe hat dir cloidnerux schon genannt. Denk daran, du musst die libboost_thread dazulinken, sonst geht nichts.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!