| 232 | } |
| 233 | |
| 234 | JobResult JobQueue::initialize() SKR_NOEXCEPT |
| 235 | { |
| 236 | JobResult ret; |
| 237 | const char8_t* n = desc.name; |
| 238 | for (uint32_t i = 0; i < desc.thread_count; ++i) |
| 239 | { |
| 240 | JobThreadFunction* jobfunc = SkrNew<JobThreadFunctionImpl>(itemList); |
| 241 | SKR_ASSERT(jobfunc != nullptr); |
| 242 | if (jobfunc == nullptr) |
| 243 | { |
| 244 | return ASYNC_RESULT_ERROR_OUT_OF_MEMORY; |
| 245 | } |
| 246 | skr::String tname = n ? n : u8"UnknownJobQueue"; |
| 247 | auto taftfix = skr::format(u8"_{}"_cuqv, (int32_t)i); |
| 248 | tname.append(taftfix); |
| 249 | NamedThreadDesc tdesc = {}; |
| 250 | tdesc.name = tname.u8_str(); |
| 251 | tdesc.priority = desc.priority; |
| 252 | tdesc.stack_size = desc.stack_size; |
| 253 | auto t = SkrNew<JobQueueThread>(); |
| 254 | t->initialize(tdesc); |
| 255 | SKR_ASSERT(t != nullptr); |
| 256 | if (t == nullptr) |
| 257 | { |
| 258 | SkrDelete(jobfunc); |
| 259 | return ASYNC_RESULT_ERROR_OUT_OF_MEMORY; |
| 260 | } |
| 261 | |
| 262 | ret = t->start(jobfunc); |
| 263 | SKR_ASSERT(ret == ASYNC_RESULT_OK); |
| 264 | if (ret != ASYNC_RESULT_OK) |
| 265 | { |
| 266 | SkrDelete(jobfunc); |
| 267 | SkrDelete(t); |
| 268 | return ret; |
| 269 | } |
| 270 | |
| 271 | thread_list.emplace_back(t); |
| 272 | } |
| 273 | return ASYNC_RESULT_OK; |
| 274 | } |
| 275 | |
| 276 | int JobQueue::finalize() SKR_NOEXCEPT |
| 277 | { |