Tag: multithreading

完成块完成后如何调用方法?

我想先调用signUp方法,一旦我得到了userID,我需要调用另一个方法normalSignupMethod 。 [ConnectionObj signUp:user]; [helper normalSignupMethod:dict]; 注册方法: [MYRequest signUp:user successBlock:^(QBResponse *response, QBUUser *user) { // Sign up was successful // Store user id [SingletonClass sharedMySingleton].userID = [NSString stringWithFormat:@"%@",response.data[@"id"]]; } errorBlock:^(QBResponse *response) { // Handle error here NSLog(@" error in creating session %@", response.error); [SVProgressHUD showErrorWithStatus:NSLocalizedString(@"SignUp to Chat error!", nil)]; }]; 这我怎么叫: dispatch_group_t group = dispatch_group_create(); […]

澄清dispatch_queue,重入和死锁

我需要澄清dispatch_queue是如何与重入和死锁有关的。 阅读这篇博客文章, 在iOS / OS X上的线程安全基础知识 ,我遇到了这样一句话: 所有分派队列都是不可重入的,这意味着如果您尝试在当前队列上分派同步,则会发生死锁。 那么,重入和僵局之间的关系是什么呢? 为什么,如果一个dispatch_queue是不可重入的,当你使用dispatch_sync调用时会产生死锁? 在我的理解中,只有当你正在运行的线程与调度块所在的线程相同时,才可以使用dispatch_sync产生死锁。 一个简单的例子如下。 如果我在主线程中运行代码,由于dispatch_get_main_queue()也会占用主线程,所以我将以死锁结束。 dispatch_sync(dispatch_get_main_queue(), ^{ NSLog(@"Deadlock!!!"); }); 任何澄清?

如何通过线程执行工作负载时使微调器animation

我在使用iOS设备的Delphi xe5应用程序中的多个线程遇到麻烦。 我的目标是执行“一些工作”(SQL查询),而TAniIndicator正在旋转。 我尝试过使用Applicaiton.ProcessMessages(),但是如果有时候旋转的话,这并不能保持微调器的顺利加载。 这是我目前的代码为btn.OnClick begin if btnLogin.Text = 'Login' then begin aThread := TMyThread.Create(True); aThread.FreeOnTerminate := true; aThread.Start; while Mode1 = 0 do begin Form_Login.LoadSpinnerFrame.visible := True; Form_Login.LoadSpinner.Visible := True; Form_Login.LoadSpinner.Enabled := True; // Application.ProcessMessages; end; Form_Login.LoadSpinnerFrame.visible := False; Form_Login.LoadSpinner.Visible := False; Form_Login.LoadSpinner.Enabled := False; btnLogin.Text := 'Logout'; aThread.Destroy; end else begin btnLogin.Text := […]

哪一个是更好的iOS照片浏览器:Three20或EGOPhotoViewer

我正在制作一个在iOS中显示图片库的应用程序,并且我遇到了两个样本。 我想知道Three20和EGOPhotoViewer的区别 。 我的意思是这两个应用程序是由相同的开发人员( enormego )开发的。 是否可以安全地使用它们的应用程序商店,我的意思是它可能不会被拒绝,并与iOS6兼容? 在Three20上使用EGOPhotoViewer有什么优势吗? 对于caching,线程等任何重要function,坚持Three20是值得的 在代码中,几乎都使用相同的类和function以不同的名称。

Swift 3 GCDlockingvariables和block_and_release错误

我正在使用Swift 3 GCD来执行我的代码中的一些操作。 但是我经常遇到_dispatch_call_block_and_release错误。 我想这个错误背后的原因是因为不同的线程修改相同的variables,但我不知道如何解决问题。 这是我的代码和解释: 我有一个variables在不同的线程中被访问和修改: var queueMsgSent: Dictionary<Date,BTCommand>? = nil func lock(obj: AnyObject, blk:() -> ()) { objc_sync_enter(obj) blk() objc_sync_exit(obj) } func addMsgSentToQueue(msg: BTCommands) { if queueMsgSent == nil { queueMsgSent = Dictionary.init() } let currentDate = Date() lock(obj: queueMsgSent as AnyObject) { queueMsgSent?.updateValue(msg, forKey: currentDate) } } func deleteMsgSentWithId(id: Int) { if […]

核心蓝牙框架本质上是asynchronous的?

当我在我的应用程序中使用CB框架时,我没有引入任何并发或被动方法,并且一切正常。 当我从外设接收每秒超过100个采样时,UI不会被阻塞。 这是否意味着它被devise为asynchronous工作? 我还没有发现任何资源表明它是asynchronous的,也没有发现有人在使用Core蓝牙时引入了调度asynchronous或后台线程的任何实现。 可以肯定地说,核心蓝牙框架本质上是asynchronous的,在iOS上使用蓝牙时,不应该担心dispatch_async和类似的事情? 编辑: 这是我如何初始化它 centralManager = CBCentralManager(delegate: self, queue: nil) peripheralManager = CBPeripheralManager(delegate: self, queue: nil 所以他们显然跑在主队伍中。 它怎么没有阻止用户界面呢?

syscall_thread_switch iOS 8.3比赛 – CocoaLumberjack的错误? 如何debugging呢?

我在我的应用程序中遇到竞争条件,每当我暂停debugging时,除了1个线程之外的所有或所有线程都卡在syscall_thread_switch上。 它在模拟器上复制的频率要高得多,而且在iPad Air上也是如此。 在CocoaLumberjack的queueLogMessage中至less有2个线程被阻塞: – 见截图。 我在8.1和8.2之前从来没有见过这个,但是我经常在8.3上看到它。 我不是声称这是一个8.3错误:) 这是一个复杂的程度,我从来没有debugging过,所以我不知道该怎么做。 我希望能够提供足够的信息,如果您需要更多信息,请告诉我们(如果信息不是很清楚的话,请具体说明如何获取信息)。 你能帮我debugging吗?! 数百万的感谢。

iPhone中的sqlite3数据库被locking – 如何避免?

我有一个查询在Sqlite3数据库上执行search。 它什么也不做,只是用阅读器阅读。 对于每个find的匹配,它会调用更新结果视图的UI的callback。 当这个search正在运行的时候,我在UI中点击了一个button,在一个新的线程中执行一些其他的操作。 最后,它应该删除search控制器的视图,并显示一个新的控制器。 但是,在某个时刻触发的操作要写入数据库。 在那里,它只是挂起,最终我会看到数据库被locking的exception。 有趣的是,search读者也不会继续,这是一个僵局。 我是否需要以某种特殊的方式打开数据库来支持multithreading的使用? 连接的构造函数是什么?

CoreData应用程序在执行提取请求pthread_mutex_lock时冻结

我正在使用核心数据pipe理数据库到我的应用程序。 我不能在这里发布代码,因为它太冗长了。 但是我想我可以用一小段代码和一些快照来解释我的问题。 +(NSArray *)checkusernameandpassword:(NSString *)entityname username:(NSString *)username password:(NSString *)password { managedobjectcontext=[Singleton sharedmysingleton].managedobjectcontext; NSEntityDescription *entity=[NSEntityDescription entityForName:entityname inManagedObjectContext:managedobjectcontext]; NSFetchRequest *request=[[NSFetchRequest alloc] init]; [request setEntity:entity]; NSPredicate *predicates=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"userName==\"%@\" AND password==\"%@\"",username,password]]; [request setPredicate:predicates]; //On Below line, My app frezes and goes into deadlock, this happens randomly while performing //some data request using Core data NSArray *arrayofrecord=[managedobjectcontext executeFetchRequest:request […]

数据库磁盘映像在MonoTouch中格式不正确

我正在使用Monotouch 5来开发一个multithreading的消息应用程序。 经过几天的操作,一些客户收到错误Database disk image is malformed 。 我正在使用我在互联网上发现的Kueger Systems的SQLite.cs来访问SQLite数据库。 看来有一个问题是多个线程访问数据库(这发生了很多)。 我已经读了一些关于如何编译数据库的选项(单线程,multithreading,序列化)。 我是否以某种方式指定? 我想继续从后台线程更新数据库,而不会破坏它。 我究竟做错了什么?