sdk-core
v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Toggle main menu visibility
Loading...
Searching...
No Matches
main.cpp
1
#include <cstdio>
2
#include <cstring>
3
4
extern
"C"
{
5
#include <
kernel.h
>
6
}
7
8
#include <chrono>
9
#include <future>
10
#include <numeric>
11
#include <thread>
12
#include <vector>
13
14
extern
"C"
int
kputs(
char
*s);
15
16
/* A program must never return from main on the rig: that reboots the console. */
17
static
int
rig_failed;
18
static
int
rig_kputs(
char
*s) {
19
if
(strstr(s,
": FAIL"
)) rig_failed = 1;
20
return
kputs(s);
21
}
22
#define kputs rig_kputs
23
24
static
void
accumulate(std::vector<int>::iterator first, std::vector<int>::iterator last,
25
std::promise<int> result) {
26
result.set_value(std::accumulate(first, last, 0));
27
}
28
29
static
void
signal_after_sleep(std::promise<void> barrier) {
30
std::this_thread::sleep_for(std::chrono::milliseconds(200));
31
barrier.set_value();
32
}
33
34
static
int
test_main() {
35
std::vector<int> numbers = {1, 2, 3, 4, 5, 6};
36
std::promise<int> sum_promise;
37
std::future<int> sum_future = sum_promise.get_future();
38
std::thread summer(accumulate, numbers.begin(), numbers.end(), std::move(sum_promise));
39
int
sum = sum_future.get();
40
summer.join();
41
42
std::promise<void> barrier;
43
std::future<void> barrier_future = barrier.get_future();
44
std::thread sleeper(signal_after_sleep, std::move(barrier));
45
barrier_future.wait();
46
sleeper.join();
47
48
if
(sum != 21) {
49
kputs((
char
*)
"cxx-threads: FAIL wrong sum\n"
);
50
return
1;
51
}
52
53
kputs((
char
*)
"cxx-threads: PASS\n"
);
54
return
0;
55
}
56
57
int
main() {
58
int
result = test_main();
59
printf(
"[ps2rig] exit=%d\n"
, (result || rig_failed) ? 1 : 0);
60
SleepThread();
61
return
0;
62
}
kernel.h
tests
cxx-threads
src
main.cpp
Generated by
1.18.0