Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

43 linhas
702 B

  1. #pragma once
  2. #include "task.h"
  3. namespace asyncpp
  4. {
  5. /* task::lock */
  6. task::lock::lock(task::handle_ptr_s p_handle)
  7. { local_storage().current = p_handle; }
  8. task::lock::~lock()
  9. { local_storage().current.reset(); }
  10. /* task*/
  11. task::task()
  12. : _handle()
  13. { }
  14. task::task(const handle_ptr_w& p_handle)
  15. : _handle(p_handle)
  16. { }
  17. void task::notify() const
  18. {
  19. auto s = _handle.lock();
  20. if (s)
  21. s->notify();
  22. }
  23. task task::current()
  24. { return task(local_storage().current); }
  25. task::storage& task::local_storage()
  26. {
  27. thread_local storage value;
  28. return value;
  29. }
  30. }