草庐IT

dispatch-async

全部标签

c++ - 如何保持 boost asio async 连续读取事件

我正在构建一个tcp客户端,它必须发送请求和读取响应,而且还必须能够检测来自tcp服务器的不是对请求的响应的传入数据-服务器可以发起tx/rx序列。保持异步读取始终处于事件状态的最佳方法是什么。我尝试了以下方法:在我的“handle_connect”方法中,我开始异步读取和异步写入。异步读取看起来像这样:size_tbytes_transferred=BUFFER_SIZE;boost::asio::async_read(m_socket,boost::asio::buffer(rcvbuf,bytes_transferred),boost::bind(&CClientSock::ha

c++ - boost::asio lib 的那些 async_* 函数是否由操作系统并行执行

最近我在使用boost::asio库,并且对那些async_*函数有疑问。假设我连续调用多个boost::asio::async_write(),这些async_write()函数是否可能由底层操作系统并行执行,即使io_service是单线程运行的谢谢! 最佳答案 isitpossiblethattheseasync_write()functionsexecutedparallellybytheunderlyingoperatingsystem是的,他们是!有两种类型的异步操作,CPU绑定(bind)任务和IO绑定(bind)任务

c++ - 如果 constexpr 而不是标签分派(dispatch)

我想使用ifconstexpr而不是标签调度,但我不确定如何使用它。下面的示例代码。templatestructMyTag{staticconstintSupported=0;};templatestructMyTag{staticconstintSupported=1;};templatestructMyTag{staticconstintSupported=1;};classMyTest{public:templatevoiddo_something(Tvalue){//insteadofdoingthisboolsupported=MyTag::Supported;//Iwant

c++ - std::async 和对象复制

我正在试验std::async,最后得到的代码看起来像这样:classobj{public:intval;obj(inta):val(a){cout结果是:newobjdeleteobjdeleteobjdeleteobj5deleteobjdeleteobjdeleteobj然后我尝试通过voidfoo(obj&a)更改voidfoo(obja):newobjdeleteobjdeleteobjdeleteobj5deleteobjdeleteobj为什么要为这个简单的代码制作我的对象的5个拷贝?我不得不承认,我真的很困惑。有人愿意解释一下吗?编辑我正在使用VS2012

ios - 完成处理程序无法按预期与 Dispatch Group 和 Concurrent Queue 一起工作

我创建了一个Dispatch组,其中三个并发队列正在运行,然后通知组进行更新,这一切进展顺利,所有这些我都放在一个带有完成处理程序的函数中。现在我面临的问题是完成处理程序在队列执行完成之前被调用。我该如何解决这个问题,请指教?funcloadCompaniesFromSynch(_data:Data,completionHandler:@escaping(String)->()){varcompanyFile=""companies=[Company]()letbatchGroup=DispatchGroup()letqueue=DispatchQueue(label:"BatchQu

ios - libdispatch.dylib 中的_dispatch_main_queue_callback_4CF$VARIANT$mp 和_dispatch_main_queue_callback_4CF$VARIANT$up 有什么区别?

查看多个iOS崩溃日志,我发现堆栈跟踪几乎相同,唯一的异常(exception)是来自libdispatch.dylib的上述行。我很好奇这种差异是否有意义(因此,这些崩溃应该分成不同的桶)或者它是否微不足道。谢谢。 最佳答案 对于所有实际用途而言,它都是相同的功能,您可以将它们视为相同的崩溃聚合,区别纯粹是内部实现细节。 关于ios-libdispatch.dylib中的_dispatch_main_queue_callback_4CF$VARIANT$mp和_dispatch_mai

ios - dispatch_queue 未执行

我正在接受stanfordcs193passignment5。问题是当我将数据搜索到目标ViewController并使用调度队列在viewDidLoad方法中获取数据时。dispatch_async不会在目标ViewController中执行。这里是我的ViewControllerA和目标ViewController的代码。查看ControllerA代码-(void)viewDidLoad{[superviewDidLoad];if(!self.places){self.spinner.hidesWhenStopped=YES;self.spinner.center=self.tab

ios - 以可重用的方式抽象 dispatch_async 调用

我正在尝试更好地创建更多可重用的代码片段。目前在我们的应用程序中,我们有一个DataManager单例,所有对数据库的调用都会通过它。因此,对于昂贵的数据库查找,我想将该调用放在嵌套的dispatch_asyncblock中,以免阻塞主线程。所以目前,在ViewControllerA中:dispatch_queue_taQueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);dispatch_async(aQueue,^{NSArray*array=[DataManagermyExpensiveMethodC

ios - 使用 Grand Central Dispatch 快速堆增长

上下文:我有一个使用GCD的iOS游戏应用程序。对于应用程序,我有三个队列:主队列、游戏逻辑队列(自定义序列)、物理队列(自定义序列)。PhysicsQueue用于进行物理模拟,而GameQueue用于进行游戏逻辑。因此对于每次更新(每1/60秒),每个队列都完成各自的工作,然后通过在其他队列上调度block来与其他队列共享它。问题:使用GCD:当我玩游戏关卡时,即队列正在做一些工作时,我发现堆/分配的增长非常快,这导致应用程序因内存问题而崩溃。如果我退出关卡并进入非游戏View,即队列没有做任何工作,内存会慢慢下降(大约需要2分钟)并变得稳定。在所附的图像中,图像中的峰值就在我退出游

ios - 使用“dispatch_async(dispatch_get_main_queue(),^{block}) 更新 UI

我想在NSURLSession的完成block中更新UI。最初的实现并没有立即更新UI。它可能在20秒后更新了UI。这是最初的实现。NSURLSessionDataTask*task=[self.sessiondataTaskWithRequest:requestcompletionHandler:^(NSData*data,NSURLResponse*response,NSError*error){NSDictionary*jsonDict=[NSJSONSerializationJSONObjectWithData:dataoptions:0error:nil];UILabel*l