109class CLASS_DECL_ACME task :
110 virtual public ::object,
113 virtual public ::timer_handler,
115 virtual public ::source,
121 class ::time m_timeLastFinishingReport;
133 bool m_bAvoidProcedureFork : 1;
135 bool m_bIsPredicate : 1;
137 bool m_bCoInitialize : 1;
138 bool m_bCoInitialized : 1;
139 bool m_bCoInitializeMultithreaded : 1;
141 bool m_bMessageThread : 1;
142 bool m_bMessageThread2 : 1;
143 bool m_bHandleRequest : 1;
144 bool m_bHandleProcedure : 1;
145 bool m_bHandleHappening : 1;
146 bool m_bTaskToolsForIncreasedFps : 1;
147 bool m_bHandlingMessages : 1;
148#ifdef PARALLELIZATION_PTHREAD
149 bool m_bJoinable : 1;
151 bool m_bRunMainLoop : 1;
152 bool m_bAutoStartOnTimerAdded :1;
153 bool m_bBranchCall : 1;
163 ::u64 m_uThreadAffinityMask;
167 ::pointer<::exception_translator> m_pexceptiontranslator;
171::i64 m_iTaskObjectSerialId;
172 class ::time m_timeSample;
175 virtual public ::particle
183 class ::time m_timeFinishing;
194 bool has_finishing_timed_out(
const class ::time & timeTimeout)
197 if(m_timeFinishing.elapsed() > timeTimeout)
211 m_timeFinishing.Now();
216 ::pointer < finishing > m_pfinishing;
222 ::task_index m_taskindex;
225 string m_strTaskName;
229 ::pointer < ::acme::user::interaction > m_pacmeuserinteractionMain;
230 ::pointer < ::acme::user::interaction > m_pacmeuserinteractionActive;
232 ::particle_array m_particleaHold;
233 ::pointer<manual_reset_happening> m_phappeningInitialization;
235 ::procedure m_procedure;
236 ::pointer<manual_reset_happening> m_pevSleep;
237 ::pointer<manual_reset_happening> m_phappeningFinished2;
239 ::comparable_array<e_happening> m_ehappeninga;
241 ::string_map < ::procedure > m_mapDoHappenings;
247 char_pointer m_pszDebug;
249 ::pointer < ::parallelization::counter > m_pcounter;
250 ::task_pointer m_ptask;
256 ::procedure_array m_procedurea2;
257 ::procedure_list_base m_procedurelistHandling;
259 ::pointer < ::locale > m_plocale;
261 class ::time m_timeLastPing;
262 class ::time m_timePingTimeout;
264 class ::time m_timeLastPostedProcedureStart;
265 class ::time m_timeDefaultPostedProcedureTimeout;
266 class ::time m_timePostedProcedureTimeout;
270 ::waiting_call_stack m_waitingcallstack;
281 const ::subparticle *m_psubparticleContext;
282 ::subparticle *m_psubparticleSynchronization;
283 const_char_pointer m_pszFile;
289 m_synchronouslockdescriptiona;
292#if defined(WINDOWS_DESKTOP)
293 ::comparable_array<
::function<bool(MSG *)>> m_msgtranslatora;
301 void on_initialize_particle()
override;
303 void on_new_main_loop_happening_creation()
override;
305#if defined(WINDOWS_DESKTOP)
306 virtual void add_msg_translator(
::function<
bool(MSG *)> msgtranslator);
307 virtual void erase_msg_translator(
::function<
bool(MSG *)> msgtranslator);
309 virtual bool msg_translator_handlers(MSG *pmsg);
319 virtual bool _defer_co_initialize_ex(
bool bMultiThread);
324 virtual void on_single_lock_lock(::subparticle *psubparticleSynchronization,
325 const ::subparticle *psubparticleContext, const_char_pointer pszFile,
327 virtual void on_single_lock_unlock(::subparticle *psubparticleSynchronization);
330 virtual void __priority_and_affinity();
331 void set_finish()
override;
334 virtual void set_task();
336 virtual void unset_task();
341 bool is_locked()
const override;
343 bool has_main_loop_happening()
override;
344 virtual bool _has_main_loop_happening_unlocked();
352 void on_start_timers_handling_hint()
override;
353 void on_stop_timers_handling_hint()
override;
356 virtual bool pick_next_posted_procedure();
358 virtual e_happening pick_happening();
360 string get_tag()
const override;
361 string task_get_name()
const;
364 ::task * get_task()
override;
365 const_char_pointer get_task_tag()
override;
368 virtual ::acme::user::interaction * get_active_user_interaction();
371 void add_task(::object* pobjectTask)
override;
373 virtual bool is_current_task()
const;
376 virtual void post_request(::request* prequest)
override;
378 virtual bool task_set_name(const ::scoped_string & scopedstrName);
382 static ::u32 WINDOWS_API s_os_task(
void* p);
386 static void* s_os_task(
void* p);
391 bool is_task_set2()
const override;
396 virtual ::locale * locale();
403 void post(const ::procedure & procedure)
override;
404 void send(const ::procedure & procedure)
override;
413 virtual void handle_posted_procedures();
415 virtual void task_caller_on_init();
417 virtual bool on_get_task_name(
string & strThreadName);
419 virtual void set_happened(e_happening ehappening);
421 virtual bool on_happening(e_happening ehappening);
424 virtual ::i32 __task_main();
425 virtual void __task_init();
427 virtual void __task_term();
430 virtual void call_init_task();
432 void init_task()
override;
433 void term_task()
override;
442 virtual bool has_message()
const;
444 virtual void on_before_branch();
446 using ::object::branch;
448 virtual void branch(enum_parallelization eparallelization = e_parallelization_asynchronous,
const create_task_attributes_t& createtaskattributes = {});
452 virtual bool task_sleep(
const class time & timeWait);
484 virtual bool is_thread_class()
const override;
485 bool should_run()
const override;
487 bool is_ready_to_quit()
const override;
494 bool has_child_task()
const override;
496 void set_child_tasks_to_finish()
override;
498 virtual void update_task_ready_to_quit();
502 virtual void kick_thread();
504 virtual ::i32 call_main();
509 virtual void run_main_loop();
512 virtual void run_loop();
513 virtual void run_loop1(::task *ptask);
514 virtual void run_loop2(::task *ptask);
516 virtual void run_default_loop1();
518 virtual bool task_run(
const class ::time & time = 0_s);
523 virtual bool task_wait(
const class ::time & timeRemaining = 0_s);
525 virtual bool task_iteration();
527 virtual bool handle_messages();
529 virtual void stop_task();
545 void kick_idle()
override;
547 bool is_branch_current()
const override;
550 virtual void synchronous_procedure(
bool bAtAnotherThread,
const procedure & procedure,
const class ::time & timeTimeout = 0_s);