Problem mit Mutex Initialisierung
-
Hallo zusammen,
ich weiß gerade nicht, ob ich in dem richtigen Forum bin, wenn nicht, bitte verschieben. Danke.
Also, ich habe ein Klasse C:
class C { private: pthread_mutex_t downloadMutex; .... }Wenn ich nun im Konstruktor die Variable downloadMutex initialisieren will:
C::C() : downloadMutex(PTHREAD_MUTEX_INITIALIZER) { }Erhalte ich als Fehler:
error: expected primary-expression before ‘{’ tokenWarum ist dies so???
Vielen Dank.
uwe
-
Zeig mal bitte ein vollstandiges Beispiel. Laut Hilfeseite sollte PTHREAD_MUTEX_INITIALIZER nur zur Initialisierung statischer Objekte benutzt werden. Vermutlich wird das Makro zu einer Initialisiererliste (alos etwas wie
{0})expandiert, die man (ohne C++11) so nicht im Konstruktor benutzen kann. (Und wenn du C++11 nutzen würdest, könntest du auch dessen Threads nutzen. Ohne C++11 könntest du Boost-Threads nutzen. Beide Lösungen arbeiten jedenfalls sehr viel besser mit C++-Sprachkonstrukten zusammen als die C-Bibliothek pthreads ohne Wrapper zu nutzen.)
-
Hallo,
also erst mal vielen Dank für die schnelle Antwort. Also ja, das Makro wird zu:
{ { 0, 0, 0, 0, 0, 0, { 0, 0 } } }expandiert. Es ist auch nicht mein Code, den habe ich so vor die Füße bekommen und soll schauen, ob es geht. Ich nutze eigentlich weder C++11 noch Boost. Wie kann ich es am einfachsten fixen? Boost nehmen?? Der Code scheint wohl mit VS gebaut worden zu sein, ich habe hier nur eine CentOS Kiste.
Vielen Dank für deine Hilfe.
uwe
-
uwerothfeld schrieb:
Wie kann ich es am einfachsten fixen?
Einfach PTHREAD_MUTEX_INITIALIZER weglassen, also
C::C() : downloadMutex() { }damit wird es allerdings ggf. unportabel
-
Wie kann ich es am einfachsten fixen? Manpages lesen. Da wird verwiesen auf die Initialisierung nicht-statischer Mutexe.
Boost nehmen??
Das wäre eine gute Idee, wenn man denn Anleitungen folgen kann.
Der Code scheint wohl mit VS gebaut worden zu sein
Das ist höchst unwahrscheinlich. Erstens ist der Code schlichtweg falsch, zweitens: Pthreads in Windows?
-
Na ja, ich hab das schon mal unter Window genutzt. Und ein Anderer auch schon:
http://www.c-plusplus.net/forum/253145
Soll aber nicht bedeuten, das ich dazu raten würde, weil ich nicht weiß, ob das noch gepflegt wird.
-
hallo zusammen,
vielen dank. scheint erst einmal zu gehen

gruß und dank!