带有进度条更新的 C++ 多线程套接字操作

Posted

技术标签:

【中文标题】带有进度条更新的 C++ 多线程套接字操作【英文标题】:C++ Multi threaded socket operation with progress bar update 【发布时间】:2014-06-12 21:34:20 【问题描述】:

我有一个正在实现的 MFC DLL。主线程创建一个进度条(CProgressCtrl),然后启动一个 CWinThread 来执行一些套接字操作。这个想法是让主线程更新进度条,而另一个线程执行 sendto 套接字操作(数据请求)以请求数据。这是一个问题,由于遗留实现,接收功能是通过覆盖 CAsyncSocket 的 OnReceive 函数来完成的。调用 OnReceive 时,代码只是将数据复制到自己的缓冲区中,并允许稍后处理另一个函数。

目前,正在执行 sendto 操作(数据请求)的另一个线程正在检查缓冲区以查看序列号是否已增加。当 sendto 操作在主线程中时一切正常(这意味着 UI 将冻结),但是在我将 sendto 操作重新定位到另一个线程后,即使数据是从其他软件发送的,也不再调用 OnReceive(已验证)。

我的问题是,当对方明确发送数据时,为什么不调用 OnReceive?我知道这可能不是最佳设计,但由于遗留设计,我想保留当前设计。

【问题讨论】:

【参考方案1】:

CASyncSocket 绑定到创建它的线程。只有该线程可以接收 OnReceive 通知。

【讨论】:

那么在这种情况下,是否意味着我需要重写大部分代码?谢谢 不能说,因为您没有解释哪些线程创建 CAsyncSocket 对象以及它们是什么类型的线程。简单的规则是与一个 CAsyncSocket 对象相关的所有内容都必须在同一个线程中,并且该线程必须从 CWinThread 派生。即,它必须是消息处理线程。

以上是关于带有进度条更新的 C++ 多线程套接字操作的主要内容,如果未能解决你的问题,请参考以下文章

没有多线程的 C++ 套接字非同步/并行代码

带有线程池服务器python的套接字

带有多线程的Python pyqt脉冲进度条

wpf多线程进度条更新进度

C ++多线程套接字无法接收客户端数据

多连接客户端套接字应用程序 C++