mardi 31 mars 2015

std::bind not able to call the class member function: C++

I have to implement A valve Open function (for specified duration). I am using boost::asio::deadline_timer


My class member function to open valve is:



bool Valves::valveOpen(ValveType type)
{
switch (type)
{
case eVentValve:
tblMap_.digitalInput[eVentValveK1].setBit();
if (tblMap_.digitalOutput[eOutK1VentValve].getBit())
{
isVentOpen_ = true;
}
return isVentOpen_;

case eVacuumPumpValve:

....
....
}


Class member function to close the valve is:



bool Valves::valveClose(ValveType type)
{
switch (type)
{
case eVentValve:
tblMap_.digitalInput[eVentValveK1].clearBit();
if (!tblMap_.digitalOutput[eOutK1VentValve].getBit())
{
isVentOpen_ = false;
}
return !isVentOpen_;

case eVacuumPumpValve:
....
....
}


I am trying to achieve the timer action as below



bool Valves::valveTimedOpen(ValveType type, int sec)
{
boost::asio::io_service io;
switch (type)
{
case eVentValve:
{
std::bind(&Valves::valveOpen, this, type); //Here
boost::asio::deadline_timer t(io, boost::posix_time::seconds(sec));
t.async_wait(std::bind(&Valves::valveClose, this, type));
boost::thread th(boost::bind(&boost::asio::io_service::run, &io));
return true;
}

case eVacuumPumpValve:

.....
.....
}


The code hits the line Here i.e.


std::bind(&Valves::valveOpen, this, type); but it does not go to bool Valves::valveOpen(ValveType type) function.


Can someone let me know the issue with this code?


Aucun commentaire:

Enregistrer un commentaire