View Single Post
  #1   Spotlight this post!  
Unread 02-14-2016, 02:33 PM
AustinSchuh AustinSchuh is offline
Registered User
FRC #0971 (Spartan Robotics) #254 (The Cheesy Poofs)
Team Role: Engineer
 
Join Date: Feb 2005
Rookie Year: 1999
Location: Los Altos, CA
Posts: 800
AustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond reputeAustinSchuh has a reputation beyond repute
Re: Member function as Task

Quote:
Originally Posted by euhlmann View Post
You can use a member function but you'll have to pass an instance to Task. I've looked in the Task source and it should work, since it forwards all of its arguments to thread. Thread internally detects if you gave a member function pointer and uses the first argument as the instance to call the function from.
Code:
class MyClass
{
  private:
    void DispatchTask();
    void ProcessTask(int param);
}

void MyClass::DispatchTask()
{
  Task myTask = new Task("MyTask", &MyClass::ProcessTask, this, someParam);
}

void MyClass::ProcessTask(int param) 
{
  // do something on task
}
&MyClass::SomeFunction is a pointer to a member function.
I'm not a very big fan of the Task class... There are some weird pieces of WPILib which have APIs which are trying to make Linux look like VxWorks, and Task is one of them.

You can do this in 1 line.

Code:
::std::thread my_thread(::std::bind(&MyClass::MyMethod, this, arg1, arg2));
If you want to delay starting the thread:

Code:
::std::thread my_thread;

my_thread = ::std::thread(::std::bind(&MyClass::MyMethod, this, arg1, arg2));
We use ::std::thread for all threads we start, and it works wonderfully.
Reply With Quote