Visual Servoing Platform  version 3.3.0
vpThread Class Reference

#include <vpThread.h>

Public Types

typedef void * Args
 
typedef void * Return
 
typedef void *(* Fn) (Args)
 
typedef pthread_t Handle
 

Public Member Functions

 vpThread ()
 
 vpThread (vpThread::Fn fn, vpThread::Args args=NULL)
 
void create (vpThread::Fn fn, vpThread::Args args=NULL)
 
virtual ~vpThread ()
 
void join ()
 
Handle getHandle ()
 
bool joinable ()
 

Protected Attributes

Handle m_handle
 
bool m_isCreated
 
bool m_isJoinable
 

Detailed Description

Class to represent individual threads of execution. This class implements native pthread functionalities if available, or native Windows threading capabilities if pthread is not available under Windows.

There are two examples implemented in testMutex.cpp and testThread.cpp to show how to use this class. The content of test-thread.cpp that hightlights the main functionalities of this class is given hereafter:

#include <iostream>
#include <visp3/core/vpThread.h>
#include <visp3/core/vpTime.h>
vpThread::Return myFooFunction(vpThread::Args args)
{
(void)(args); // Avoid warning: unused parameter args
// do stuff...
return 0;
}
vpThread::Return myBarFunction(vpThread::Args args)
{
(void)(args); // Avoid warning: unused parameter args
// do stuff...
return 0;
}
vpThread::Return myQuxFunction(vpThread::Args args)
{
unsigned int args_ = *((unsigned int *)args);
std::cout << "qux arg: " << args_ << std::endl;
// do stuff...
return 0;
}
int main()
{
unsigned int qux_arg = 12;
vpThread foo;
vpThread bar((vpThread::Fn)myBarFunction);
vpThread qux((vpThread::Fn)myQuxFunction,
(vpThread::Args)&qux_arg); // Pass qux_arg to myQuxFunction() function
vpTime::wait(1000); // Sleep 1s to ensure myQuxFunction() internal printings
std::cout << "Joinable after construction:" << std::endl;
std::cout << "foo: " << foo.joinable() << std::endl;
std::cout << "bar: " << bar.joinable() << std::endl;
std::cout << "qux: " << qux.joinable() << std::endl;
foo.create((vpThread::Fn)myFooFunction);
std::cout << "Joinable after creation:" << std::endl;
std::cout << "foo: " << foo.joinable() << std::endl;
std::cout << "bar: " << bar.joinable() << std::endl;
std::cout << "qux: " << qux.joinable() << std::endl;
if (foo.joinable())
foo.join();
if (bar.joinable())
bar.join();
if (qux.joinable())
qux.join();
std::cout << "Joinable after joining:" << std::endl;
std::cout << "foo: " << foo.joinable() << std::endl;
std::cout << "bar: " << bar.joinable() << std::endl;
std::cout << "qux: " << qux.joinable() << std::endl;
return 0;
}

More examples are provided in Tutorial: How to use multi-threading capabilities.

Examples
grabRealSense.cpp, testForceTorqueAti.cpp, testMutex.cpp, testThread.cpp, tutorial-face-detector-live-threaded.cpp, tutorial-grabber-opencv-threaded.cpp, and tutorial-grabber-v4l2-threaded.cpp.

Definition at line 72 of file vpThread.h.

Member Typedef Documentation

◆ Args

typedef void* vpThread::Args

Definition at line 76 of file vpThread.h.

◆ Fn

◆ Handle

typedef pthread_t vpThread::Handle

Definition at line 79 of file vpThread.h.

◆ Return

typedef void* vpThread::Return

Definition at line 77 of file vpThread.h.

Constructor & Destructor Documentation

◆ vpThread() [1/2]

vpThread::vpThread ( )
inline

Default constructor that does nothing. To attach a function to this thread of execution you need to call create().

Definition at line 91 of file vpThread.h.

◆ vpThread() [2/2]

vpThread::vpThread ( vpThread::Fn  fn,
vpThread::Args  args = NULL 
)
inline

Construct a thread object that represents a new joinable thread of execution. The new thread of execution calls fn passing args as arguments.

Parameters
fn: A pointer to a function.
args: Arguments passed to the call to fn (if any).

Definition at line 99 of file vpThread.h.

◆ ~vpThread()

virtual vpThread::~vpThread ( )
inlinevirtual

Destroy the thread.

Definition at line 134 of file vpThread.h.

Member Function Documentation

◆ create()

void vpThread::create ( vpThread::Fn  fn,
vpThread::Args  args = NULL 
)
inline

Creates a thread object that represents a new joinable thread of execution.

Parameters
fn: A pointer to a function.
args: Arguments passed to the call to fn (if any).
Examples
testMutex.cpp, and testThread.cpp.

Definition at line 109 of file vpThread.h.

◆ getHandle()

Handle vpThread::getHandle ( )
inline

Returns a value used to access implementation-specific information associated to the thread.

Definition at line 173 of file vpThread.h.

◆ join()

void vpThread::join ( )
inline

This function return when the thread execution has completed. This blocks the execution of the thread that calls this function until the function called on construction returns (if it hasn't yet).

After a call to this function, the thread object becomes non-joinable and can be destroyed safely.

See also
joinable()
Examples
testThread.cpp.

Definition at line 153 of file vpThread.h.

◆ joinable()

bool vpThread::joinable ( )
inline

Returns whether the thread object is joinable.

A thread object is not joinable in any of these cases:

  • if it was default-constructed and create() was not called.
  • if join() has been called.
See also
join()
Examples
testThread.cpp.

Definition at line 184 of file vpThread.h.

Member Data Documentation

◆ m_handle

Handle vpThread::m_handle
protected

Thread handle.

Definition at line 187 of file vpThread.h.

◆ m_isCreated

bool vpThread::m_isCreated
protected

Indicates if the thread is created.

Definition at line 188 of file vpThread.h.

◆ m_isJoinable

bool vpThread::m_isJoinable
protected

Indicates if the thread is joinable.

Definition at line 189 of file vpThread.h.

vpThread::Return
void * Return
Definition: vpThread.h:77
vpTime::wait
VISP_EXPORT int wait(double t0, double t)
Definition: vpTime.cpp:172
vpThread
Definition: vpThread.h:72
vpThread::Fn
void *(* Fn)(Args)
Definition: vpThread.h:78
vpThread::Args
void * Args
Definition: vpThread.h:76
vpThread::join
void join()
Definition: vpThread.h:153
vpThread::create
void create(vpThread::Fn fn, vpThread::Args args=NULL)
Definition: vpThread.h:109
vpThread::joinable
bool joinable()
Definition: vpThread.h:184