mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-11-04 20:44:02 +08:00 
			
		
		
		
	WaitObject: Added RemoveWaitingThread, fixed a bug, and cleanup.
This commit is contained in:
		
							parent
							
								
									c22bac6398
								
							
						
					
					
						commit
						5e77e2e1de
					
				@ -19,13 +19,20 @@ HandleTable g_handle_table;
 | 
			
		||||
u64 g_program_id = 0;
 | 
			
		||||
 | 
			
		||||
void WaitObject::AddWaitingThread(Thread* thread) {
 | 
			
		||||
    if (std::find(waiting_threads.begin(), waiting_threads.end(), thread) == waiting_threads.end()) {
 | 
			
		||||
    auto itr = std::find(waiting_threads.begin(), waiting_threads.end(), thread);
 | 
			
		||||
    if (itr == waiting_threads.end())
 | 
			
		||||
        waiting_threads.push_back(thread);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void WaitObject::RemoveWaitingThread(Thread* thread) {
 | 
			
		||||
    auto itr = std::find(waiting_threads.begin(), waiting_threads.end(), thread);
 | 
			
		||||
    if (itr != waiting_threads.end())
 | 
			
		||||
        waiting_threads.erase(itr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Thread* WaitObject::ResumeNextThread() {
 | 
			
		||||
    if (waiting_threads.empty()) return nullptr;
 | 
			
		||||
    if (waiting_threads.empty())
 | 
			
		||||
        return nullptr;
 | 
			
		||||
 | 
			
		||||
    auto next_thread = waiting_threads.front();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -105,7 +105,13 @@ public:
 | 
			
		||||
    void AddWaitingThread(Thread* thread);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Resumes the next thread waiting on this object
 | 
			
		||||
     * Removes a thread from waiting on this object (e.g. if it was resumed already)
 | 
			
		||||
     * @param thread Pointer to thread to remove
 | 
			
		||||
     */
 | 
			
		||||
    void RemoveWaitingThread(Thread* thead);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Resumes (and removes) the next thread waiting on this object
 | 
			
		||||
     * @return Pointer to the thread that was resumed, nullptr if no threads are waiting
 | 
			
		||||
     */
 | 
			
		||||
    Thread* ResumeNextThread();
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user