我正在开发一个需要永久服务器套接字监听的应用程序,所以我把它放在一个线程中,这里有我为它编写的类:
class listenThread : public wxThread
{
public:
listenThread(MyFrame *h) : wxThread() { handler = h; };
virtual void * Entry();
private:
MyFrame *handler;
};
void *listenThread::Entry()
{
handler->sockConvs[nconvs] = handler->sockServer->Accept();
if(handler->sockConvs[handler->nconvs]->IsConnected() && handler->nconvs < 10)
{
handler->frames[handler->nconvs] = new MyFrame(NULL);
handler->frames[handler->nconvs++]->Show();
}
}
Thread的MyFrame类处理程序:
class MyFrame : public wxFrame
{
friend class listenThread;
public:
/* other stuff ... */
private:
/* other stuff ... */
private:
listenThread *myThread;
// Both initialized in MyFrame class constructor
wxSocketServer *sockServer;
wxIPV4address addr;
wxSocketBase *sockConvs[10];
MyFrame *frames[10];
int nconvs;
};
现在问题是,当客户端连接到我的应用程序时,侦听线程接收此传入连接(对于每个连接,通常,它使用来自sockConvs数组的不同SocketBase)并分配(如您所见)新的MyFrame 。 但!在Entry方法的最后,我的新框架已关闭。为什么呢?
谢谢!