Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading CAsyncSocket和螺纹/工艺安全_Multithreading_Sockets_Mfc_Casyncsocket - Fatal编程技术网

Multithreading CAsyncSocket和螺纹/工艺安全

Multithreading CAsyncSocket和螺纹/工艺安全,multithreading,sockets,mfc,casyncsocket,Multithreading,Sockets,Mfc,Casyncsocket,我有一些使用派生类的遗留代码。此类重写OnReceive,并且在SendTo周围还有一个包装器。代码位于dll中,多个应用程序将在同一台PC上使用该dll,所有端口都是硬编码的 我猜我需要以命名互斥体(MFC中的CMutex)类位的形式提供同步,我不确定 我是否应该在OnReceive中锁定一个命名互斥体,在CMyAsyncSocket的Send方法中锁定另一个命名互斥体 我需要同步还是MFC CAsyncSocket会帮我同步?担心访问多个进程上的套接字。底层套接字将提供连接隔离,因此您无需担

我有一些使用派生类的遗留代码。此类重写OnReceive,并且在SendTo周围还有一个包装器。代码位于dll中,多个应用程序将在同一台PC上使用该dll,所有端口都是硬编码的

我猜我需要以命名互斥体(MFC中的CMutex)类位的形式提供同步,我不确定

我是否应该在OnReceive中锁定一个命名互斥体,在CMyAsyncSocket的Send方法中锁定另一个命名互斥体


我需要同步还是MFC CAsyncSocket会帮我同步?担心访问多个进程上的套接字。

底层套接字将提供连接隔离,因此您无需担心保护每个进程的连接。假设在每个进程中只有一个线程使用套接字,则只需处理AsyncSocket可能出现的阻塞问题,即当套接字未准备好处理请求时?

谢谢snowdude。如果在每个进程中有多个线程使用套接字,那么我需要提供什么样的同步?我已经阅读了“Windows Socket:Bocket”的微软页面,我仍然不确定我需要考虑什么同步。我不确定是否有多个线程使用Socket AM来检查这一点。不过,我有多个流程。您之前说过:“假设每个进程中只有一个线程使用套接字”,这让我想知道CAsyncSocket是否支持一个进程中的多个线程,而支持多个进程?很抱歉,我对CAsyncSocket工作原理的理解仅限于msdn文档。如果有多个线程访问同一CAsyncSocket对象,则只需担心同步问题(就像对同一位数据的任何多线程访问一样)。CAsyncSocket只是底层Winsock API函数的包装,例如socket、accept、recv等。好的,谢谢。因此,即使我在一台PC上有多个进程与同一个套接字通信(比如说多播模式,使用相同的多播地址和端口),那么底层CAsyncSocket将为我处理同步。如果一个进程中有多个线程使用同一个CAsyncSocket实例,那么我需要添加一个criticalsection来进行同步?因此,我永远不需要CAsyncSocket的互斥,如果我有多个线程,只需要一个CCCriticalSection?CAsyncSocket不会为您处理任何同步,底层套接字会。测试一下。看看会发生什么。