草庐IT

async_write

全部标签

c++ - std::async 不使用 std::launch::async 策略启动新线程

如果我使用std::launch::async策略启动std::async,它不应该在新线程中启动每个异步任务吗?目前看起来新的异步任务移动到刚刚完成其工作的线程。我使用VC11作为我的编译器。从输出中可以看出,当使用std::async启动新工作程序(例如,工作程序多次获取ID为34500的线程)时,它会在先前完成的线程中启动。我对std::async的理解是错误的还是存在底层工作窃取队列或类似的东西?Worker(ID=24072)starting.Worker(ID=34500)starting.Worker(ID=32292)starting.Worker(ID=31392)s

c++ - ostream::write 或 ostream::operator<< 在什么情况下会失败?

在我的C++代码中,我不断地将不同的值写入文件。我的问题是,考虑到文件已成功打开这一事实,如果在任何情况下write或 最佳答案 失败原因太多,无法一一列举。可能的是:分区终于满了用户超出了他的磁盘配额分区已被粗暴地卸载分区已损坏(文件系统错误)磁盘发生物理故障...DoIneedtocheckeverysinglecallofwriteor如果您希望您的程序对故障具有弹性,那么肯定会。如果您不这样做,则仅表示您正在写入的数据可能会或可能不会被写入,这等于说您不关心它。注意:您可以设置std::ostream::exceptions

c++ - asio::async_write 在大容量流上同步非常困难

我目前正在使用AsioC++库并围绕它编写了一个客户端包装器。我最初的方法是非常基本的,只需要在一个方向上流动。要求已经改变,我已经切换到使用所有异步调用。除了asio::async_write(...)之外,大多数迁移都很容易。我使用了几种不同的方法,但不可避免地会遇到每一种方法的僵局。应用程序连续地传输大量数据。我一直远离strands,因为它们不会阻塞并且会导致内存问题,尤其是当服务器负载很重时。作业将备份并且应用程序堆无限增长。所以我创建了一个阻塞队列只是为了找出在回调和/或阻塞事件之间使用锁会导致未知行为的困难方法。包装器是一个非常大的类,所以我将尝试解释我目前状态下的景观,

c++ - 使用多线程在 GNU C 中使用 Write Function 是否安全

将多个线程的函数调用写入同一个套接字安全吗?我们想在它们之间添加同步吗?它会引起诸如此类的问题吗应用程序从网络层到应用层的写入/读取延迟我们正在使用GNUC++库LinuxRedhat环境上的GCC4这是一个服务器端进程,其中服务器和客户端之间只有1个套接字连接服务器和客户端位于2台不同的机器上数据从服务器发送到客户端客户端到服务器问题1-当服务器向客户端发送数据时(多个线程通过同一个套接字向客户端写入数据)但是从某些线程写入的数据没有进入客户端,它甚至没有进入网络层同一台机器的(Tcpdump没有该数据)问题2-当客户端向服务器发送数据时,客户端发送的数据显示在服务器的TCPdump

c++ - std::async 在 linux 上的 gcc 4.7 中被破坏了吗?

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭9年前。在实际代码中使用它之前,我正在隔离地测试std::async,以验证它是否在我的平台(即ubuntu12.1064位)上正常工作。它有效(很少)并且通常只是挂起。如果它对您有用,请不要妄下结论。多试几次,估计会挂掉。如果我删除pthread_mutex测试,它不会挂起。这是我可以重现挂起的最小代码。有什么原因不能将Cpthread代码与C++异步代码混合使

c++ - 未调用 boost SSL async_shutdown 完成处理程序

我将boost1.54.0与OpenSSL1.0.1e结合使用。不时关闭SSL连接对象时,我会看到async_shutdown()的完成处理程序不被调用。调试后我发现,当存在超出async_write()时会发生这种情况。SSLasync_shutdown()应该发送SSLAlert(Closing),因此我们这里有2次写入。我知道多个async_write()是被禁止的。我应该如何处理这种情况?我应该在调用SSLasync_shutdown()之前等待async_write()完成吗?编辑:根据this我可能需要在底层TCP套接字上使用cancel()来取消所有未完成的异步操作。是否

c++ - boost asio 中的并发读取和 async_read_some

假设在boost::asio中的套接字上启用了async_read_some服务,如果在同一套接字上调用阻塞读取会发生什么情况?一段伪代码如下:usingboost::asio::local::stream_protocol;boost::asio::io_serviceio;stream_protocol::sockets(io);s.connect(stream_protocol::endpoint(address));s.async_read_some(aBuffer,aCallback);//startasync_readboost::threadthread(boost::b

C++ ifstream,ofstream : What's the difference between raw read()/write() calls and opening file in binary mode?

这个问题涉及ifstream和ofstream在读取和写入数据到文件时的行为。通过阅读stackoverflow.com,我设法发现operator(流插入运算符)在输出之前将double等对象转换为文本表示,并调用read()和write()分别读取和写入存储在内存(二进制格式)中的原始数据。编辑:这很明显,这里没有什么意外。我还发现以二进​​制模式打开文件会阻止根据不同操作系统的要求自动转换换行符。所以我的问题是:这个自动翻译,例如;来自\n至\r\n调用函数时发生read()和write()?或者此行为仅特定于operator.(还有operator>>。)请注意,这里有一个类似

c++ - 我如何强制 boost::asio 优先完成 async_write 调用而不是运行其他处理程序?

我正在使用boost::asio(不经意的传输方案)实现一组简单的协议(protocol)。这些在运行时受CPU限制。为了boost效率,我想尽量让两台主机都工作。如果主机A可以在执行两项任务之间做出选择,其中一项会让主机B开始计算,而另一项则不会,我希望主机A选择前者。目前,io_service在async_writes之前运行计算密集型处理程序。除非tcp窗口已满(或某些类似情况正在阻止向socker写入数据),否则完成async_write比运行其他处理程序几乎肯定更好。我看过asio的处理程序优先级队列示例。重新实现async_write以使用这样的优先级队列是解决我的问题的唯

c++ - std::async 参数的生命周期是多少?

似乎通过std::async执行的函数的参数共享future的生命周期:#include#include#includestructS{S(){std::cout结果:enterscope++S()138054661364main'svariable|S(&&)138054661108++std::async'sinternalcopy+--+S(&&)138054659668|std::async'sinternalcopy||S(&&)138054922824+--+func'sargument+--+~S()138054659668|||~S()138054661108++||f