- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个运行 std::thread
的 NetworkDevice 类对所有传入的数据包进行排队。在执行此操作时,我还想在相同的 sf::UdpSocket
上发送数据包.我找不到任何关于 sf::UdpSocket
的发送和接收方法的信息是线程安全的。
这个类看起来像这样:
class NetworkDevice
{
std::thread m_Thread;
std::mutex m_Mtx;
bool isRunning;
sf::UdpSocket m_Socket;
std::deque<std::pair<Packet, Connection>> m_Packets;
void listenUdp()
{
while(isRunning)
{
// Do some stuff
m_Socket.receive(packet, remoteAddress, remotePort);
m_Mtx.lock();
m_Packets.push_back(std::make_pair(packet, Connection(remoteAddress, remotePort)));
m_Mtx.unlock();
// Do some stuff
}
}
void startThread();
{
isRunning = true;
m_Thread = std::thread([this](){listenUdp();});
}
void sendPacket(Packet& packet, Connection& connection);
{
m_Socket.send(packet, connection.address, connection.port);
}
void update(std::deque<std::pair<Packet, Connection>>& packets)
{
m_Mtx.lock();
packets = m_Packets;
m_Mtx.unlock();
}
};
我在sf::UdpSocket::send
时会有什么意想不到的效果吗?和 sf::UdpSocket::receive
方法同时起作用?
如果是这样,我宁愿:
最佳答案
我无法回答您正在使用的包,但在操作系统级别,这些方法是原子的,因此是线程安全的。您可以同时从多个线程调用它们。同时发送和接收将独立进行;同时发送将以某种未定义的顺序自动发生;同时接收也将以某种未定义的顺序自动发生。
除非包具有严重的实现特性,否则我希望它也是线程安全的:没有内在的原因不能做到。您当然不需要单独的套接字来发送和接收。这太浪费了。
关于c++ - sf::UdpSocket 的发送和接收方法是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33855199/
在将 UDPSocket 绑定(bind)到空闲端口号后,我正在尝试获取端口号。所以 udp_server = UDPSocket.newudp_server.bind('localhost', 0)
我正在尝试在 Tokio 中同时处理到达的 UDP 数据包。然而,以下 MWE 没有达到我的预期: extern crate futures; extern crate tokio_core; ext
我有一个运行 std::thread 的 NetworkDevice 类对所有传入的数据包进行排队。在执行此操作时,我还想在相同的 sf::UdpSocket 上发送数据包.我找不到任何关于 sf::
我是ruby新手,跟着《The Ruby Programming Language》这本书,我正在尝试学习一些ruby中的Socket,以下是我的简单服务器/客户端: ## server requir
使用 Rust 的 UdpSocket ,它似乎只有 send()、recv() 和 set_nonblocking(bool)。这是一组相当有限的功能,例如如果 recv() 总是阻塞直到收到数据包
我正在编写一个使用 UDP 发送和接收数据包的应用程序。然而,documentation of recv_from状态: If a message is too long to fit in the
我正在为我的 CS 类(class)开发一款原始的多人战舰游戏。我能够让它运行并通过 LAN 发送信息。为了测试此通信是否有效,我创建了一个带有监听器功能的循环,当确认已从另一台计算机的监听线程接收到
我正在尝试通过 UDPSocket 类向服务器发送一些十六进制数据。 require 'socket' socket = UDPSocket.new socket.send('230055', 0,
我的机器有两个以太网网络接口(interface)。 eno0 和 eno1。 eno0 是接入互联网的地方,eno1 有一个连接的以太网设备。我通过 Link-Local Address 方法得到它
std::old_io::net::udp::UdpSocket已替换为 std::net::UdpSocket , 和 fn set_timeout(&mut self, timeout_ms: O
我想使用 udp 协议(protocol)发送消息。我有一个像这样的网址这个:http://torrent.ubuntu.com:6969/announce。 但是在文档和所有示例中,我看到方法 bi
我正在处理 simple example用于创建 rust udp 客户端/服务器应用程序。但是当尝试使用 send_to 或 recv_from 方法时,我收到以下错误: [E0599] 没有名为
我在使用 Rust 试验 BitTorrent 跟踪器协议(protocol)时遇到了这个问题。 这个应该使用 UDP 套接字发送一些数据的简单程序失败了: use std::collections:
let addr = "239.255.255.250:1982"; let socket = UdpSocket::bind(addr).unwrap(); let message = "some
我正在尝试做相当于 this piece of Ruby 的事情: def color=(color) @color = color any_bar = UDPSocket.new any
我正在尝试发送一个 DatagramPacket,然后必须等待来自服务器的确认,以便我知道我是否必须重新发送相同的数据包或发送下一个数据包...... 我在客户端使用相同的套接字,发送数据包并接收确认
这个问题在这里已经有了答案: Reading from TcpStream results in empty buffer (1 个回答) UdpSocket.recv_from fails with
我刚刚解决了基础架构中的一个延迟问题,该问题是由于此处的代码片段在每次运行代码时触发了对 getaddrinfo 的调用而触发的: sock = UDPSocket.open sock.send("#
我正在使用 mio::udp::UdpSocket 接收对来自客户端的请求的响应。看起来我在触发事件上收到了部分 UDP 数据包。我不确定这是否是 mio 库中的错误。 我已经尝试过 PollOpt:
Editor's note: This code example is from a version of Rust prior to 1.0 and is not valid Rust 1.0 co
我是一名优秀的程序员,十分优秀!