簡體   English   中英

wxWidgets-wxThread

[英]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;
};

現在的問題是,當客戶端連接到我的應用程序時,偵聽線程會收到此傳入的連接(顯然,對於每個連接,它使用的是與sockConvs數組不同的SocketBase)並分配(如您所見)新的MyFrame。 但! 在Entry方法的末尾,我的新Frame已關閉。 為什么?

謝謝!

我懷疑這可能與您不應該在輔助線程中進行任何GUI調用有關,這在wxThread文檔中有更全面的說明。 您可能應該將事件發回到主線程並在其中創建框架。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM