+#ifndef RUNNABLE_H_\r
+#define RUNNABLE_H_\r
+\r
+#include <iostream>\r
+#include <boost/date_time.hpp>\r
+#include <boost/thread.hpp>\r
+\r
+using std::cout;\r
+using std::endl;\r
+\r
+using boost::posix_time::seconds;\r
+using boost::this_thread::sleep;\r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* Declaration *|\r
+ \*---------------------------------------------------------------------*/\r
+\r
+/*--------------------------------------*\\r
+ |* Public *|\r
+ \*-------------------------------------*/\r
+\r
+class Runnable\r
+ {\r
+ public:\r
+\r
+ Runnable(int a, int b)\r
+ {\r
+ // inputs\r
+ this->a = a;\r
+ this->b = b;\r
+\r
+ // ouputs\r
+ this->result = -1;\r
+ }\r
+\r
+ virtual ~Runnable(void)\r
+ {\r
+ // rien\r
+ }\r
+\r
+ /**\r
+ * Foncteur\r
+ */\r
+ void operator()()\r
+ {\r
+ cout << "runnable : foncteur : start" << endl;\r
+ work();\r
+ cout << "runnable : foncteur : end" << endl;\r
+ }\r
+\r
+ void run(void)\r
+ {\r
+ cout << "runnable : methode : start" << endl;\r
+ work();\r
+ cout << "runnable : methode : end" << endl;\r
+ }\r
+\r
+ int getResult(void)\r
+ {\r
+ return this->result;\r
+ }\r
+\r
+ private:\r
+\r
+ /**\r
+ * common to work and operator()\r
+ */\r
+ void work(void)\r
+ {\r
+\r
+ this->result = a + b;\r
+ cout << "[inside thread] : " << a << " + " << b << " = " << result << endl;\r
+ // Pretend to do something useful...\r
+ {\r
+ seconds workTime(3);\r
+ sleep(workTime);\r
+ }\r
+ }\r
+\r
+ private:\r
+\r
+ int a;\r
+ int b;\r
+ int result;\r
+ };\r
+\r
+#endif \r
+\r
+/*----------------------------------------------------------------------*\\r
+ |* End *|\r
+ \*---------------------------------------------------------------------*/\r