static void launch_monitor_thread(xml_binding_t *binding) { switch_threadattr_t *thd_attr = NULL; switch_threadattr_create(&thd_attr, globals.pool); switch_threadattr_stacksize_set(thd_attr, SWITCH_THREAD_STACKSIZE); switch_threadattr_priority_set(thd_attr, SWITCH_PRI_IMPORTANT); switch_thread_create(&binding->thread, thd_attr, monitor_thread_run, binding, globals.pool); }
bool AsyncIOServer::Start( switch_memory_pool_t *pool, int iThreadCount, const char *ip, switch_port_t port ) { bool bFlag = false; switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "AsyncIOServer::Start( " "iThreadCount : %d, " "ip : %s, " "port : %d " ") \n", iThreadCount, ip, port ); mRunning = true; mpPool = pool; mThreadCount = iThreadCount; // 创建处理队列 switch_queue_create(&mpHandleQueue, SWITCH_CORE_QUEUE_LEN, mpPool); // 创建处理线程 switch_threadattr_t *thd_handle_attr = NULL; switch_threadattr_create(&thd_handle_attr, mpPool); switch_threadattr_detach_set(thd_handle_attr, 1); switch_threadattr_stacksize_set(thd_handle_attr, SWITCH_THREAD_STACKSIZE); switch_threadattr_priority_set(thd_handle_attr, SWITCH_PRI_IMPORTANT); mpHandleThreads = (switch_thread_t**)switch_core_alloc(mpPool, mThreadCount * sizeof(switch_thread_t*)); for(int i = 0; i < mThreadCount; i++) { switch_thread_create(&mpHandleThreads[i], thd_handle_attr, ws_handle_thread, this, mpPool); } // 开始监听socket bFlag = mTcpServer.Start(mpPool, ip, port); if( bFlag ) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "AsyncIOServer::Start( success ) \n"); } else { Stop(); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "AsyncIOServer::Start( fail ) \n"); } return bFlag; }