summaryrefslogtreecommitdiffstats
path: root/ml/dlib/examples/thread_function_ex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/examples/thread_function_ex.cpp')
-rw-r--r--ml/dlib/examples/thread_function_ex.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/ml/dlib/examples/thread_function_ex.cpp b/ml/dlib/examples/thread_function_ex.cpp
new file mode 100644
index 00000000..91825ffe
--- /dev/null
+++ b/ml/dlib/examples/thread_function_ex.cpp
@@ -0,0 +1,71 @@
+// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
+/*
+ This is a very simple example that illustrates the use of the
+ thread_function object from the dlib C++ Library.
+
+ The output of the programs should look like this:
+
+ 45.6
+ 9.999
+ I have no args!
+ val: 3
+*/
+
+
+#include <iostream>
+#include <dlib/threads.h>
+#include <dlib/ref.h>
+
+using namespace dlib;
+using namespace std;
+
+void thread_1(double a)
+{
+ cout << a << endl;
+}
+
+void thread_2 ()
+{
+ cout << "I have no args!" << endl;
+}
+
+void thread_increment(double& a)
+{
+ a += 1;
+}
+
+int main()
+{
+ // create a thread that will call thread_1(45.6)
+ thread_function t1(thread_1,45.6);
+ // wait for the t1 thread to end
+ t1.wait();
+
+
+ // create a thread that will call thread_1(9.999)
+ thread_function t2(thread_1,9.999);
+ // wait for the t2 thread to end
+ t2.wait();
+
+
+ // create a thread that will call thread_2()
+ thread_function t3(thread_2);
+
+
+ // Note that we can also use the ref() function to pass a variable
+ // to a thread by reference. For example, the thread below adds
+ // one to val.
+ double val = 2;
+ thread_function t4(thread_increment, dlib::ref(val));
+ t4.wait(); // wait for t4 to finish before printing val.
+ // Print val. It will now have a value of 3.
+ cout << "val: " << val << endl;
+
+
+
+ // At this point we will automatically wait for t3 to end because
+ // the destructor for thread_function objects always wait for their
+ // thread to terminate.
+}
+
+