Thread 具备多种职责
1.传统的提供运行一个任务
由用户实现Runnable中的接口Run 然后调用Start(Runnable)
或直接覆盖 virtual void Run() 然后调用Start
2.基于消息队列异步处理
只要Post(消息处理者,消息本身) 然后汇总另一个线程运行,当然还的启动Start(NULL)
3.基于网络事件的处理
int main()
{
rtc::Thread* pThread = rtc::Thread::Current();//启动时会通过 ThreadManager::WrapCurrentThread() 创建Thread
/*
Thread *ThreadManager::WrapCurrentThread() {
Thread* result = CurrentThread();
if (NULL == result) {
result = new Thread();
result->WrapCurrentWithThreadManager(this, true);
}
return result;
}
*/
rtc::AsyncSocket* pAsycSock = pThread->socketserver()->CreateAsyncSocket(SOCK_STREAM);//非主动创建的Thread也是可以创建socket具有事件处理功能的
// pThread->Start();只对主动创建的Thread对象才能Start
pThread->ProcessMessages(1);
return 0;
}
Thread 创建后,可以通过Start 运行,继承Thread的Run 自动运行,但处理事件的ProcessMessages需要自己调用,或Thread::Run()调用父类
以下创建Thread的对象具有事件处理功能,可以创建socket
Thread();
explicit Thread(SocketServer* ss);
explicit Thread(std::unique_ptr<SocketServer> ss);
static std::unique_ptr<Thread> CreateWithSocketServer();
以下创建的没有事件处理功能 不能创建socket
static std::unique_ptr<Thread> Create();//只能具有线程和线程间消息通信功能
static Thread* Current(); //取决于当前线程的行为,本身不创建线程;即使在main中也不创建线程,只是创建了Thread对象
如果是在main中是具有事件处理功能,可以创建socket,但不能Start,所以不能创建再线程,但可以处理线程间消息功能(没有验证)
如果是在Thread::Create 取的线程,则跟Thread::Create一样,不能处理网络事件,