0
我開發一個需要有一個永久的服務器監聽套接字的應用程序,所以我把它在一個線程,這裏有我爲它編寫的類:wxWidgets的 - wxThread
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();
}
}
的主題類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;
};
現在的問題是,當一個客戶端連接到我的應用程序,監聽線程接收到達的連接(每個連接,obiviusly,它使用從sockConvs陣列不同SocketBase)和分配(如你所見)一個新的MyFrame。 但是!在Entry方法結束時,我的新Frame被關閉。爲什麼?
謝謝!