File indexing completed on 2025-05-11 08:24:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #include <chrono>
0029 #include <iostream>
0030 #include <thread>
0031 #include <mutex>
0032
0033 #include <rtems/thread.hpp>
0034
0035 using namespace std::chrono_literals;
0036
0037 extern "C" void rcxx_run_test(void);
0038
0039 void example_1();
0040 void example_2();
0041 void example_3();
0042
0043 struct test_thread
0044 {
0045 test_thread();
0046
0047 void start();
0048 bool running();
0049 void body(const char* title, int i, char c);
0050
0051 rtems::thread::thread thread_default;
0052 rtems::thread::thread thread_attr;
0053
0054 std::mutex mutex;
0055
0056 bool finished;
0057 };
0058
0059 test_thread::test_thread()
0060 : finished(false)
0061 {
0062 }
0063
0064 void test_thread::start()
0065 {
0066 thread_default = rtems::thread::thread(&test_thread::body, this,
0067 "default", 1, 'D');
0068
0069 rtems::thread::attributes attr;
0070
0071 attr.set_name("RTHREAD");
0072 attr.set_priority(5);
0073 attr.set_stack_size(32 * 1024);
0074
0075 thread_attr = rtems::thread::thread(attr, &test_thread::body, this,
0076 "attr", 2, 'R');
0077 }
0078
0079 void test_thread::body(const char* title, int i, char c)
0080 {
0081 std::cout << "Thread: start: " << title << std::endl
0082 << ' ' << i << ' ' << c << std::endl;
0083
0084 size_t count = 5;
0085
0086 while (count--) {
0087 std::this_thread::sleep_for(1s);
0088 }
0089
0090 std::cout << "Thread: end: " << title << std::endl;
0091
0092 std::lock_guard<std::mutex> lock(mutex);
0093
0094 finished = true;
0095 }
0096
0097 bool test_thread::running()
0098 {
0099 std::lock_guard<std::mutex> lock(mutex);
0100 return finished == false;
0101 }
0102
0103 void test_1()
0104 {
0105 test_thread tt;
0106 tt.start();
0107 while (tt.running())
0108 std::this_thread::sleep_for(1s);
0109 }
0110
0111 void rcxx_run_test(void)
0112 {
0113 try {
0114 test_1();
0115
0116 example_1();
0117 example_2();
0118 example_3();
0119 } catch (...) {
0120 std::cout << "Thread: ouch" << std::endl;
0121 throw;
0122 }
0123 }