/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
threads problemer...
Fra : Allan Eriksen


Dato : 27-03-03 00:18

Hej,

jeg sidder og kigger lidt på threads programmering i c++, men jeg er løbet
ind i (for mig uløselige) problemer når jeg forsøger at pthread_create() en
ny tråd. Koden ser således ud:

#include <unistd.h>
#include <sys/stat.h>
#include <linux/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h> //for the threads

//path and filename to the "named pipe"
#define FIFO_FILE "MYFIFO"


class CommModule {
private:
FILE *fp;
char readbuf[80];
pthread_t thrdReadFIFO;

public:
CommModule(){
//Create the FIFO if it does not exists
umask(0);
mknod(FIFO_FILE, S_IFIFO|0666,0);

if(pthread_create( &thrdReadFIFO, NULL, readFIFO,NULL)!=0)
<------------det er her det går galt
{
perror("pthread_create");
exit(1);
}
pthread_join (thrdReadFIFO, NULL);

}

void readFIFO(void){
while(1){
fp=fopen(FIFO_FILE, "r");
fgets(readbuf, 80, fp);
printf("Received string: %s\n", readbuf);
fclose(fp);
}
pthread_exit(0);
}
};


int main(void){

CommModule comm;

return(0);
}

Kompileren melder følgende fejl når jeg kompiler:

commModule.cpp: In method `CommModule::CommModule ()':
commModule.cpp:24: no matches converting function `readFIFO' to type
`void *(*) (void *)'
commModule.cpp:32: candidates are: void CommModule::readFIFO ()

Jeg har prøvet alt hvad der står i min magt, men ved virkelig ikke hvad
fejlen er. Håber nogen kan hjælpe...

På forhånd tak.
Allan





 
 
Soren Davidsen (27-03-2003)
Kommentar
Fra : Soren Davidsen


Dato : 27-03-03 09:22

"Allan Eriksen" <holst@nork.auc.dk> writes:

[snip]
> Kompileren melder følgende fejl når jeg kompiler:
>
> commModule.cpp: In method `CommModule::CommModule ()':
> commModule.cpp:24: no matches converting function `readFIFO' to type
> `void *(*) (void *)'
> commModule.cpp:32: candidates are: void CommModule::readFIFO ()
>
> Jeg har prøvet alt hvad der står i min magt, men ved virkelig ikke hvad
> fejlen er. Håber nogen kan hjælpe...

pthread_create forventer en 'c' funktion, og ikke en c++ metode.

En god ide (som jeg altid har brugt) er at lave traade i C++ ligesom
i Java, dvs. lav en Thread.cpp og en Runnable.cpp som du implementerer
og giver til Thread's constructor.

Inde i Thread kan du saa gemme alt den 'grimme' pthread haandtering.

Jeg ville have givet dig et link til mine klasser, men kan ikke lige
pt. finde dem, der er dog sikkert andre der kan hjaelpe, ellers maa
jeg jo grave lidt dybere .


Mvh,

--
___
Soren Davidsen / o\
Math student, ICSMA (_____)
__ http://www.tanesha.net/ _________________________________(___)_______

Soren Davidsen (27-03-2003)
Kommentar
Fra : Soren Davidsen


Dato : 27-03-03 10:37

Soren Davidsen <soren200303@tanesha.net> writes:

> Jeg ville have givet dig et link til mine klasser, men kan ikke lige
> pt. finde dem, der er dog sikkert andre der kan hjaelpe, ellers maa
> jeg jo grave lidt dybere .

Keder mig vist lidt for meget .

http://turtle.math.klte.hu/~flower/cppthread/


Mvh,

--
___
Soren Davidsen / o\
Math student, ICSMA (_____)
__ http://www.tanesha.net/ _________________________________(___)_______

Bo Lorentsen (27-03-2003)
Kommentar
Fra : Bo Lorentsen


Dato : 27-03-03 16:13

In <b5tc53$nv8$1@sunsite.dk>, Allan Eriksen wrote:

> Hej,
>
> jeg sidder og kigger lidt på threads programmering i c++, men jeg er løbet
> ind i (for mig uløselige) problemer når jeg forsøger at pthread_create() en
> ny tråd. Koden ser således ud:

Som sagt kan man ikke "bare" kalde en member function fra create_pthread
da den jo mangler den skjulte "this". Jeg kan anbefale dig ZThread eller
ligende (http://zthread.sourceforge.net), så er du fri for at det
kedelige.

/BL




kim (27-03-2003)
Kommentar
Fra : kim


Dato : 27-03-03 19:53

Hej
> Som sagt kan man ikke "bare" kalde en member function fra create_pthread
> da den jo mangler den skjulte "this". Jeg kan anbefale dig ZThread eller
> ligende (http://zthread.sourceforge.net), så er du fri for at det
> kedelige.
jeg har forsøgt at compile zthread uden held. Jeg kører en redhat7.3 og
har installeret den nyeste automake 1.7.3.

jeg kører :

configure
make
hvor outputtet så er:
cd . && /bin/sh /home/klbe00/programmering/c++/test/ZThread-2.2.11/missing
--run aclocal-1.7 -I share cd . && \
/bin/sh /home/klbe00/programmering/c++/test/ZThread-2.2.11/missing --run
automake-1.7 --gnu Makefile
Usage: autoconf [-h] [--help] [-m dir] [--macrodir=dir]
[-l dir] [--localdir=dir] [--version] [template-file]
configure.ac: `AM_INIT_AUTOMAKE' must be used WARNING: `automake-1.7' is
needed, and you do not seem to have it handy on your
system. You might have modified some files without having the
proper tools for further handling them. Check the `README' file,
it often tells you about the needed prerequirements for
installing this package. You may also peek at any GNU archive
site, in case some other package would contain this missing
`automake-1.7' program.
make: *** [Makefile.in] Error 1

Er der nogen som kan gennemskue hvad der går galt?? jeg har både en
automake-1.7 og en aclocale-1.7..

mvh
Kim

Bo Lorentsen (28-03-2003)
Kommentar
Fra : Bo Lorentsen


Dato : 28-03-03 19:48

In <pan.2003.03.27.18.52.59.330558.9395@lksdf.dk>, kim wrote:

>> Som sagt kan man ikke "bare" kalde en member function fra create_pthread
>> da den jo mangler den skjulte "this". Jeg kan anbefale dig ZThread eller
>> ligende (http://zthread.sourceforge.net), så er du fri for at det
>> kedelige.
> jeg har forsøgt at compile zthread uden held. Jeg kører en redhat7.3 og
> har installeret den nyeste automake 1.7.3.
Hmm, jeg har lige bygget den i debian, men held. Det "eneste" der skulle
til var at installerer automake1.7.

Har du evt. en gammel automake liggende, som kan give knas ?

> Er der nogen som kan gennemskue hvad der går galt?? jeg har både en
> automake-1.7 og en aclocale-1.7..
Ja, det ser da fornuftigt ud ellers, og som sagt oversætter den fint her.

/BL

Allan Eriksen (30-03-2003)
Kommentar
Fra : Allan Eriksen


Dato : 30-03-03 20:30


"kim" <lkjsdf@lksdf.dk> wrote in message
news:pan.2003.03.27.18.52.59.330558.9395@lksdf.dk...

> jeg kører :
>
> configure
> make
> hvor outputtet så er:
> cd . && /bin/sh /home/klbe00/programmering/c++/test/ZThread-2.2.11/missing
> --run aclocal-1.7 -I share cd . && \
> /bin/sh /home/klbe00/programmering/c++/test/ZThread-2.2.11/missing --run
> automake-1.7 --gnu Makefile
> Usage: autoconf [-h] [--help] [-m dir] [--macrodir=dir]
> [-l dir] [--localdir=dir] [--version] [template-file]
> configure.ac: `AM_INIT_AUTOMAKE' must be used WARNING: `automake-1.7' is
> needed, and you do not seem to have it handy on your
> system. You might have modified some files without having the
> proper tools for further handling them. Check the `README' file,
> it often tells you about the needed prerequirements for
> installing this package. You may also peek at any GNU archive
> site, in case some other package would contain this missing
> `automake-1.7' program.
> make: *** [Makefile.in] Error 1
>
> Er der nogen som kan gennemskue hvad der går galt?? jeg har både en
> automake-1.7 og en aclocale-1.7..

Jeg havde selv samme problem, men fandt ud af at man også skal opdatere sin
"autoconf" til nyeste version. Den kan findes på www.rpmfind.net.

\allan



kim (31-03-2003)
Kommentar
Fra : kim


Dato : 31-03-03 13:50

Hej,

> Jeg havde selv samme problem, men fandt ud af at man også skal opdatere
> sin "autoconf" til nyeste version. Den kan findes på www.rpmfind.net.

Det hjælper ihvertfald.. Jeg giver en vingummibamse ved lejlighed :)

mvh

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408193
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste