gpt4 book ai didi

c++ - wxWidgets - wx线程

转载 作者:行者123 更新时间:2023-11-28 08:23:24 28 4
gpt4 key购买 nike

我正在开发一个需要有一个永久服务器套接字监听的应用程序,所以我把它放在一个线程中,这里有我为它编写的类:

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 方法结束时,我的新框架被关闭。为什么?

谢谢!

最佳答案

我怀疑这可能与您不应该在辅助线程中进行任何 GUI 调用这一事实有关,这在 wxThread 的文档中有更全面的解释。 .您可能应该将事件发回主线程并在那里创建框架。

关于c++ - wxWidgets - wx线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984393/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com