Visual Servoing Platform  version 3.0.1
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
testThread.cpp
1 /****************************************************************************
2  *
3  * This file is part of the ViSP software.
4  * Copyright (C) 2005 - 2017 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * ("GPL") version 2 as published by the Free Software Foundation.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ViSP with software that can not be combined with the GNU
13  * GPL, please contact Inria about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * See http://visp.inria.fr for more information.
17  *
18  * This software was developed at:
19  * Inria Rennes - Bretagne Atlantique
20  * Campus Universitaire de Beaulieu
21  * 35042 Rennes Cedex
22  * France
23  *
24  * If you have questions regarding the use of this file, please contact
25  * Inria at visp@inria.fr
26  *
27  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29  *
30  * Description:
31  * Test threading capabilities.
32  *
33  * Authors:
34  * Fabien Spindler
35  *
36  *****************************************************************************/
37 
46 #include <visp3/core/vpConfig.h>
47 
48 #if defined(VISP_HAVE_PTHREAD) || (defined(_WIN32) && !defined(WINRT_8_0))
49 
51 #include <iostream>
52 
53 #include <visp3/core/vpThread.h>
54 #include <visp3/core/vpTime.h>
55 
56 vpThread::Return myFooFunction(vpThread::Args args)
57 {
58  (void)(args); // Avoid warning: unused parameter args
59  // do stuff...
60  return 0;
61 }
62 
63 vpThread::Return myBarFunction(vpThread::Args args)
64 {
65  (void)(args); // Avoid warning: unused parameter args
66  // do stuff...
67  return 0;
68 }
69 
70 vpThread::Return myQuxFunction(vpThread::Args args)
71 {
72  unsigned int args_ = *((unsigned int *) args);
73  std::cout << "qux arg: " << args_ << std::endl;
74  // do stuff...
75  return 0;
76 }
77 
78 int main()
79 {
80  unsigned int qux_arg = 12;
81  vpThread foo;
82  vpThread bar((vpThread::Fn)myBarFunction);
83  vpThread qux((vpThread::Fn)myQuxFunction, (vpThread::Args)&qux_arg); // Pass qux_arg to myQuxFunction() function
84 
85  vpTime::wait(1000); // Sleep 1s to ensure myQuxFunction() internal printings
86  std::cout << "Joinable after construction:" << std::endl;
87  std::cout << "foo: " << foo.joinable() << std::endl;
88  std::cout << "bar: " << bar.joinable() << std::endl;
89  std::cout << "qux: " << qux.joinable() << std::endl;
90 
91  foo.create((vpThread::Fn)myFooFunction);
92 
93  std::cout << "Joinable after creation:" << std::endl;
94  std::cout << "foo: " << foo.joinable() << std::endl;
95  std::cout << "bar: " << bar.joinable() << std::endl;
96  std::cout << "qux: " << qux.joinable() << std::endl;
97 
98  if (foo.joinable()) foo.join();
99  if (bar.joinable()) bar.join();
100  if (qux.joinable()) qux.join();
101 
102  std::cout << "Joinable after joining:" << std::endl;
103  std::cout << "foo: " << foo.joinable() << std::endl;
104  std::cout << "bar: " << bar.joinable() << std::endl;
105  std::cout << "qux: " << qux.joinable() << std::endl;
106 
107  return 0;
108 }
110 
111 #else
112 
113 #include <iostream>
114 
115 int main()
116 {
117 # if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
118  std::cout << "You should enable pthread usage and rebuild ViSP..." << std::endl;
119 # else
120  std::cout << "Multi-threading seems not supported on this platform" << std::endl;
121 # endif
122 }
123 #endif
VISP_EXPORT int wait(double t0, double t)
Definition: vpTime.cpp:157
void * Return
Definition: vpThread.h:36
void *(* Fn)(Args)
Definition: vpThread.h:37
void create(vpThread::Fn fn, vpThread::Args args=NULL)
Definition: vpThread.h:70
void * Args
Definition: vpThread.h:35
void join()
Definition: vpThread.h:116
bool joinable()
Definition: vpThread.h:149