July 13th, 2011 12:53 AM
#1
Problem in Threads in C++.
Hello, I m facing problem while adding thread in my class. But if I add thread to my main function than it's working fine.
Code that is working fine is
Code:
#include <cstdlib>
#include <stdio.h>
#include "cDqu.h"
#include "cEnq.h"
#include <pthread.h>
void *Fun4Dequeu(void *threadid);
main()
{
pthread_t thdMain;
int t=1;
pthread_create( &thdMain, NULL, Fun4Dequeu, (void *)t);
pthread_join( thdMain, NULL);
exit(0);
}
void *Fun4Dequeu(void *threadid)
{
for(;
{
//Some code;
}
}
But when I am trying to add a thread in my class then it gives me error
Error:
cDqu.h:36: error: argument of type ‘void (cDequeue void*)’ does not match ‘void* (*)(void*)’
cDqu.h: At global scope:
cDqu.h:40: error: cannot declare pointer to ‘void’ member
the code for the class is
Code:
#include <cstdlib>
#include <fstream>
#include <time.h>
#include <ctime>
#include <unistd.h>
#include <sys/time.h>
#include <pthread.h>
#include "cEnq.h"
using namespace std;
#ifndef CDQU_H
#define CDQU_H
std: fstream file("output.txt", std::ios_base: ut);
class cDequeue : public cEnqueue
{
public:
pthread_t thdDqueue;
int iThdRet;
cDequeue();
void StartThread2();
void FunGetToken();
void funDequeue(void *threadid);
};
void cDequeue::StartThread2()
{
int t=1;
pthread_create(&thdDqueue,NULL,funDequeue,(void *)t);
/*above line giving problem*/
pthread_join(thdDqueue,NULL);
}
/*below line giving problem*/
void cDequeue::*funDequeue(void *threadid)
{
cEnqueue objEnq;
int Token=0;
if(objEnq.qToken.empty() == false)
{
Token = objEnq.qToken.front();
objEnq.qToken.pop();
}
}
void cDequeue::FunGetToken()
{
int Token=0;
Token = FunDequeue();
if(Token !=0)
file<<"\tToken:"<<Token<<endl;
else
{
file<<"\tQueue Empty!!!"<<endl;
}
}
#endif /* CDQU_H */
Please sugesst me for the same.
Regards,
Hardik
July 14th, 2011 09:48 AM
#2
Re: Problem in Threads in C++.
please make sure that the thread function you pass to pthread is a static not a class member, that is why it is not working.
pthread_create is expecting function pointer ::
void ( *function ) (void *)
you are passing in class
void (myclass::*function)(void *)
Tags for this Thread
Posting Permissions
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
Forum Rules
Click Here to Expand Forum to Full Width
Bookmarks