BOOL dlg_session::OnInitDialog() { set_thread_id(); CDialogEx::OnInitDialog(); _editFont.CreatePointFont(90, "宋体"); _msgEdit.SetFont(&_editFont); _outputEdit.SetFont(&_editFont); return TRUE; }
void set_child_thread_id(thread_identifier *parent, const char * fmt, ...) { va_list args; thread_identifier *tid; assert(parent->pipeline); tid = (thread_identifier *) memory_pool_alloc(parent->pipeline->pool, sizeof(thread_identifier)); tid->pipeline = parent->pipeline; va_start(args, fmt); vsnprintf(tid->name, THD_ID_NAME_LEN, fmt, args); va_end(args); set_thread_id(tid); }
int process_all_schedules (void) { schedule_t *schedule; event_t *event = NULL; int i; pthread_t save; pthread_mutex_lock (&SCHEDULE_MASTER->mutex_lock); schedule = SCHEDULE_MASTER->last_schedule; for (i = 0; i < LL_GetCount (SCHEDULE_MASTER->ll_schedules); i++) { if (schedule == NULL) { schedule = LL_GetHead (SCHEDULE_MASTER->ll_schedules); } else { schedule = LL_GetNext (SCHEDULE_MASTER->ll_schedules, schedule); if (schedule == NULL) schedule = LL_GetHead (SCHEDULE_MASTER->ll_schedules); } assert (schedule != NULL); if (schedule->is_running > 0 && !schedule->can_pass) continue; if (schedule->new_event_flag > 0) { pthread_mutex_lock (&schedule->mutex_lock); event = LL_GetHead (schedule->ll_events); LL_RemoveFn (schedule->ll_events, event, NULL); schedule->new_event_flag --; schedule->lastrun = time (NULL); pthread_mutex_unlock (&schedule->mutex_lock); SCHEDULE_MASTER->last_schedule = schedule; break; } } pthread_mutex_unlock (&SCHEDULE_MASTER->mutex_lock); if (event == NULL) { return (0); } #ifdef MRT_DEBUG if (event->description) trace (TR_THREAD, schedule->trace, "THREAD Event %s now run (%d events left) for %s\n", event->description, LL_GetCount (schedule->ll_events), schedule->description); else trace (TR_THREAD, schedule->trace, "THREAD Event %x now run (%d events left) for %s\n", event->call_fn, LL_GetCount (schedule->ll_events), schedule->description); #endif /* MRT_DEBUG */ save = set_thread_id (schedule->self); schedule->is_running++; schedule_event_dispatch (event); schedule->is_running--; if (BIT_TEST (schedule->flags, MRT_SCHEDULE_DELETED)) destroy_schedule (schedule); set_thread_id (save); return (1); }
void FrameworkThread::Run() { #ifndef NDEBUG #if defined(OS_WIN) && defined(COMPILER_MSVC) SetThreadName(GetCurrentThreadId(), name_.c_str()); #endif #endif InitTlsData(this); SetThreadWasQuitProperly(false); { ThreadId thread_id = Thread::CurrentId(); set_thread_id(thread_id); // The message loop for this thread. MessageLoop *message_loop; if (loop_type_ == MessageLoop::kCustomMessageLoop) message_loop = factory_->CreateMessageLoop(); else { if (loop_type_ == MessageLoop::kIOMessageLoop) message_loop = new IOMessageLoop; #if defined(OS_WIN) else if (loop_type_ == MessageLoop::kUIMessageLoop) message_loop = new UIMessageLoop; #endif else message_loop = new MessageLoop; } message_loop_ = message_loop; // Let the thread do extra initialization. // Let's do this before signaling we are started. Init(); event_.Signal(); #if defined(OS_WIN) message_loop_->RunWithDispatcher(dispatcher_); #else message_loop_->Run(); #endif // OS_WIN // Let the thread do extra cleanup. Cleanup(); //DCHECK(GetThreadWasQuitProperly()); // We can't receive messages anymore. if (loop_type_ != MessageLoop::kCustomMessageLoop) delete message_loop_; else { delete message_loop_; factory_.reset(); } message_loop_ = NULL; } set_thread_id(kInvalidThreadId); { FrameworkThreadTlsData *tls = GetTlsData(); if (tls != NULL) { } //DCHECK(tls->managed == 0); // you must call ThreadManager::UnregisterThread before come there } FreeTlsData(); }