问题背景:
1、在主线程中创建Socket,并Connect到服务器,同时响应FD_CONNECT事件作相关处理。
2、通过工作线程调用Socket连接函数,发现没有接收到Connect事件通知。
问题分析与解决:
每个线程都有自己的消息队列(非GUI线程在调用User或GDI函数以后,系统才会为该线程创建消息队列),因此在一个线程中发送的消息不能被另一个线程接收,通过显式的调用API函数PostThreadMessage可以将消息发送给其他线程。
1 BOOL PostThreadMessage( 2 DWORD idThread, 3 UINT Msg, 4 WPARAM wParam, 5 LPARAM lParam 6 );
值得注意的是,PostThreadMessage需要接收消息的线程存在消息队列,否则会调用失败报1444错误,非GUI线程在创建时是没有消息队列的,可以调用GetMessage、PeekMessage要求系统创建一个消息队列。