Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Objective-C

Войти
Регистрация
Восстановить пароль
 
di_ingenio
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
#1

Как использовать dispatch_after? - Objective-C

23.07.2013, 20:19. Просмотров 1108. Ответов 5
Метки нет (Все метки)

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
NSMutableString bufferAnswer;
bool isBufferAnalysed;
+(void) waitAnalys:(NSArray*) strInArray
{
    isBufferAnalysed=false;
    NSMutableString *str;
    
    while (!isBufferAnalysed)
    {
        str=[BufferClass getCurrentStr];
        if(![str isEqualToString:@""])
        {
            /* анализ буфера (у меня там цикл) */
              if(/*условие при котором анализ завершается*/)
               {
                    isBufferAnalysed=true;
                    break;
               }
            /* конец анализа */
        }
    }
    bufferAnswer=str;
 }
+ (void) interruptAnalys
{
    isBufferAnalysed=true;
}
+ (NSMutableString*) analysateBuffer
{
    double delayInSeconds = 10.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        if(!isAnswerCame)
        {
            [BufferCom interruptAnalys];
        }
    });
    [BufferCom waitAnalys:strIn];
    return bufferAnswer;
}
По идее, если по истечении 10 секунд буффер не закончил анализироваться, то анализ должен прерваться, т.е. выполняться вот это
Objective-C
1
2
3
4
if(!isAnswerCame)
        {
            [BufferCom interruptAnalys];
        }
Но к сожалению, не выполняется. Подскажите, где косяк?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2013, 20:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как использовать dispatch_after? (Objective-C):

Для чего нужен NSRunLoop и как его использовать? - Objective-C
Если бы кто-нибудь привел мне парочку примеров использования NSRunLoop и объяснил для чего вообще нужно им манипулировать - я был бы очень...

Можно ли использовать переходы в iAd как валюту в приложении? - Программирование iOS
Привет, друзья. Назрел вопрос с правилами использования рекламы iAd в проекте. Я создаю приложение, в котором хочу предоставить...

Получить NSString из JSON и использовать его как заголовок в TableView - Программирование iOS
у меня в JSON файле есть вот такая строчка "titles of sections": мне нужно поставить каждую строку в заголовок соответствующей...

Как правильно использовать закаченую картинку, ретина/не ретина дисплей - Программирование iOS
Всем доброго времени суток, как не странно возник вопрос и не могу найти полный ответ на него. Всем наверное известно что картинки для...

Как использовать куки, чтобы потом было можно их использовать в запросах - C#
Скажите полажуйста! как добавить ! куки , чтобы потом было можно использовать в запросах! тоесть public string Get(string url,...

Оставить все как есть || использовать парсер xml || или использовать struct - C++
Собственно имеется код... #include <io.h> #include <string> #include <vector> #include <fstream> #include <iomanip> #include...

5
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
23.07.2013, 21:04 #2
Objective-C
1
[BufferCom waitAnalys:strIn];
надо заменить на
Objective-C
1
2
3
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
[BufferCom waitAnalys:strIn];
});
Должно помочь. Судя по всему, waitAnalys выполняется в главном потоке. И до блока с interruptAnalys очередь просто не доходит.
1
Vorona
Peace 2 all shining faces
669 / 531 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
23.07.2013, 22:00 #3
вот еще доходчиво написано про диспатчи, after в том числе - http://idev.by/ios/21137/
1
di_ingenio
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
24.07.2013, 13:51  [ТС] #4
Цитата Сообщение от Vorona Посмотреть сообщение
вот еще доходчиво написано про диспатчи, after в том числе - http://idev.by/ios/21137/
Именно по этому и делала. Но не работает=(
0
mobidevelop
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
24.07.2013, 15:19 #5
А мой фикс тоже не работает?
0
di_ingenio
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
24.07.2013, 16:24  [ТС] #6
Цитата Сообщение от mobidevelop Посмотреть сообщение
А мой фикс тоже не работает?
вы наверное имели ввиду
Objective-C
1
2
3
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^(void){
//код
});
Он немедлено передает управление дальше, ставя задачу в очередь.
А мне нужно, чтобы ждал, либо 10 секунд, либо, раньше,если анализ закончился.

Добавлено через 11 минут
Прошу прощения. Я все исправила.

Objective-C
1
2
3
4
5
6
7
8
9
10
dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
        if(!isBufferAnalysed)
        {
            [BufferCom interruptAnalys];
        }
    });
    [Socket sendMessage:str];
    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^(void){
       [BufferCom waitAnalys:strIn];
    });
Дело было в том, что они, наверное, в разных очередях были =)
0
24.07.2013, 16:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2013, 16:24
Привет! Вот еще темы с ответами:

Как в VC++2008 использовать Framewok 2.0 или не использовать вообще?? - Visual C++
интересует консольное приложение - по умолчанию .Net3.5, и поменять нельзя, бо соответствующий ListBox.Enable = False

Как правильно использовать стек, использовать вершину стека и т.п - C#
Научите пожалуйста правильно использовать стек, использовать вершину стека и т.п. Просто стек очень нужен - очень полезный оператор.

Как использовать #undef или вообще не использовать - C (СИ)
Посоветуйте какую лучше применить концепцию. Хочу сделать в проекте унифицированные сообщения об ошибках в едином стиле. Чтобы они...

как объявить правильно tr и как его использовать при вызове функции? - C++
main.cpp case 8: cout << "Firs trapec # is: "; cin >> k; k = k - 1; cout << "Second trapec # is: "; cin >> j;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru