MCPcopy Create free account
hub / github.com/ThePhD/sol2 / worker_thread

Function worker_thread

examples/source/docs/std_thread.cpp:25–58  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

23};
24
25void worker_thread(worker_data& data) {
26 for ([[maybe_unused]] std::uint64_t loops = 0; true; ++loops) {
27 // Wait until main() sends data
28 std::unique_lock<std::mutex> data_lock(
29 data.until_ready_mutex);
30 data.until_ready_condition.wait(
31 data_lock, [&data] { return data.is_ready; });
32
33 if (data.payload.size() == 0) {
34 // signaling we are done
35 return;
36 }
37
38 // just for easier typing
39 sol::state& lua = data.worker_lua;
40
41 // we own the lock now, do the work
42 std::variant<double, std::vector<double>> result
43 = lua.safe_script(data.payload.as_string_view());
44
45 // store returning payload,
46 // clear current payload
47 data.return_payload = std::move(result);
48 data.payload.clear();
49
50 // Send result back to main
51 std::cout << "worker_thread data processing is "
52 "completed: signaling & unlocking\n";
53 data.is_processed = true;
54 data.is_ready = false;
55 data_lock.unlock();
56 data.until_ready_condition.notify_one();
57 }
58}
59
60int main() {
61

Callers

nothing calls this directly

Calls 4

safe_scriptMethod · 0.80
as_string_viewMethod · 0.80
sizeMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected