Re: Problem with function pointer
- From: Sohail Ahmed Siddiqui <sohail@xxxxxxxxxxxxxxx>
- Date: Fri, 05 May 2006 02:52:41 +0200
Philippe Amarenco wrote:
Sohail Ahmed Siddiqui <sohail@xxxxxxxxxxxxxxx> writes:Basically i want to use it like:
Hi,
i am working on a program which should connect to data server in one
thread, other threads will be used to update the UI and sorting data, in
some of the cases i have to use a function that should take int as
parameter and in some cases it has no parameter list. My class looks some
thing like this
class FunctionThread : public Threads
{
public:
typedef int (*Function)();
FunctionThread(Function function,
size_t stackSize=StackSize::DEFAULT,
Priority priority=Priority::INHERIT,
SchedulingPolicy schedpol=SchedulingPolicy::INHERIT,
const std::string& name="",
bool detached=true);
protected:
virtual int run();
private:
Function function_;
};
my function which enables me to make different threads i am using
FunctionThread::FunctionThread(Function function,
size_t stackSize,
Priority priority,
SchedulingPolicy schedpol,
const std::string& name, bool detached)
: Threads(stackSize, priority, schedpol, name, detached,1)
{}
int FunctionThread::run()
{
return (*function_)();
}
This works very well with functions that have no parameters, but if i
change typedef int (*Function)(); to typedef int (*Function)(int); some
how it doesn't seem to work at all, can some one please tell me how can i
change this so that it can take int as normal parameters?
then where that extra 'int' parameter comes from? do you add it as a
parameter to the 'FunctionThread::run()' method?
i wait till i get a transaction number from user and then i create a thread
and come back to UI while the thread works and gets the information
Transaction* trans = new Transaction(transNo);//this is the uint32_t
Transaction class has a worker thread from FunctionThread class
class Transaction
{
public:
Transaction(uint32_t transNo);
virtual ~Transaction();
static int transact()
private:
uint32_t transaction_;
FunctionThread worker_;
};
and
Transaction::Transaction(uint32_t transNo)
:worker_(StackSize::0x10000,
Priority::NORMAL,
SchedulingPolicy::FIFO,
"Transaction",false),
transaction_(transNo)
{
worker_.start();
}
Transaction::transact()
{
// connect to server and get the transaction from server
}
If I had to do it, i would replace Function by a function object:
class Function
{
public:
virtual void execute() = 0;
void operator() { execute(); }
};
If you need a function that takes an 'int' as parameter and returns an
'int', you simply do that:
class FunctionInt : public Function
{
int _param;
int _ret;
public:
FunctionInt(int i) : _param(i) {}
void execute() {
/* _ret = _param; */
}
int get_result() const { return _ret; }
};
so your FunctionThread object can handle any type of function without
knowning its requirements.
.
- References:
- Problem with function pointer
- From: Sohail Ahmed Siddiqui
- Re: Problem with function pointer
- From: Philippe Amarenco
- Problem with function pointer
- Prev by Date: Re: Problem with function pointer
- Next by Date: Re: Problem with function pointer
- Previous by thread: Re: Problem with function pointer
- Next by thread: Re: Problem with function pointer
- Index(es):
Relevant Pages
|
|