diff options
author | Sebastian Valle <subv2112@gmail.com> | 2017-09-30 16:12:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-30 16:12:18 +0200 |
commit | db752b52e84227696af989c2ec1965020c03fac7 (patch) | |
tree | 04f1e6403bede1890252a0af047e2e149abdde4c /src/core/hle/kernel/thread.h | |
parent | Merge pull request #2962 from huwpascoe/static_cast (diff) | |
parent | Kernel/Threads: When putting a thread to wait, specify a function to execute when it is awoken. (diff) | |
download | yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar.gz yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar.bz2 yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar.lz yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar.xz yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar.zst yuzu-db752b52e84227696af989c2ec1965020c03fac7.zip |
Diffstat (limited to 'src/core/hle/kernel/thread.h')
-rw-r--r-- | src/core/hle/kernel/thread.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index f02e1d43a..4679c2022 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -41,6 +41,11 @@ enum ThreadStatus { THREADSTATUS_DEAD ///< Run to completion, or forcefully terminated }; +enum class ThreadWakeupReason { + Signal, // The thread was woken up by WakeupAllWaitingThreads due to an object signal. + Timeout // The thread was woken up due to a wait timeout. +}; + namespace Kernel { class Mutex; @@ -199,14 +204,18 @@ public: VAddr wait_address; ///< If waiting on an AddressArbiter, this is the arbitration address - /// True if the WaitSynchronizationN output parameter should be set on thread wakeup. - bool wait_set_output; - std::string name; /// Handle used as userdata to reference this object when inserting into the CoreTiming queue. Handle callback_handle; + using WakeupCallback = void(ThreadWakeupReason reason, SharedPtr<Thread> thread, + SharedPtr<WaitObject> object); + // Callback that will be invoked when the thread is resumed from a waiting state. If the thread + // was waiting via WaitSynchronizationN then the object will be the last object that became + // available. In case of a timeout, the object will be nullptr. + std::function<WakeupCallback> wakeup_callback; + private: Thread(); ~Thread() override; |