Форум программистов, компьютерный форум, киберфорум
Программирование iOS/iPhone
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
1

Timer

28.06.2013, 14:37. Показов 1036. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно чтобы в течение N секунд считывался и анализировался буффер. Но только N сек. Я так понимаю, что нужно использовать NSTimer. Не дадите ссылку или же привидите пример как это будет правильнее сделать. Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2013, 14:37
Ответы с готовыми решениями:

Запуск/остановка таймера при вводе в Edit команд Timer Start/Timer Stop
Суть вот в чём на форме есть таймер который выполняет обратный отсчёт и есть Edit, задача вот...

Не удаётся связать два файла timer.h и timer.cpp
Добрый вечер, у меня есть класс и библиотеки которые нужно использовать в нескольких программах, по...

Timer vs System.Windows.Forms.Timer
Занятную штуку недавно обнаружил: Всем известный Timer из модуля Timers отказывается работать,...

Неоднозначная ссылка "Timer" между "System.Windows.Forms.Timer" и "System.Timers.Timer"
Я делю таймер в Windows Form. но ругается компилятор на такой код: using System; using...

9
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
28.06.2013, 20:39 2
Неважно какой буфер и неважно как анализировался?
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- (void)fireWithDuration:(NSTimeInterval)duration {
    if (!_timer) {
        _timer = [NSTimer scheduledTimerWithTimeInterval:_updateInterval target:self selector:@selector(onTimerFires:) userInfo:nil repeats:YES];
        _timeToStop = CFAbsoluteTimeGetCurrent() + duration;
        [_timer fire];
    }
}
 
- (NSTimeInterval)remainingTime {
    return _timeToStop - CFAbsoluteTimeGetCurrent();
}
 
- (void)onTimerFires:(NSTimer*)timer {
    NSTimeInterval time = [self remainingTime];
   /*
     Do some work here
   */
    if (time <= 0){
       [timer invalidate];
    }
}
Добавлено через 5 минут
Ну и не забудьте правильно таймер уничтожить(invalidate), занилить ссылки, ну и прочие мелкие штуки(в зависимости arc/no-arc)
1
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
28.06.2013, 22:01 3
Еще можно через dispatch_after сделать. Кода много меньше получится. И таймер релизить не придется ;-)
1
4 / 4 / 1
Регистрация: 16.10.2009
Сообщений: 38
02.07.2013, 11:22 4
mobidevelop, Уф, блоки для новичка это жесть, я отчасти сам иногда немогу разобрать их и стараюсь чем меньше использовать, есть какая-то литература для детального их описания? А то смотрел уроки и на eng. и нашол на рус. языке но так и много не понял
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
02.07.2013, 11:27 5
Дело исключительно привычки и грамотного форматирования кода. Жесть начинается когда они вкладываются :-)
А особых хитростей там нет. Только за ретейнами следить надо, чтобы они не зациклились.
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
03.07.2013, 00:50 6
Цитата Сообщение от КОЗАК СЕРГІЙ Посмотреть сообщение
Уф, блоки для новичка это жесть, я отчасти сам иногда немогу разобрать их и стараюсь чем меньше использовать
шикарнейшая возможность языка, в юнит тестировании они везде, вчастности в Kiwi фреймворке, а так же очень удобны для реализации колбеков

вот оффициальная литература, далеко ходить не надо: https://developer.apple.com/li... ual/Blocks

вот еще доступно расписано:
http://pragmaticstudio.com/blo... 4-blocks-1
http://pragmaticstudio.com/blo... 4-blocks-2
2
4 / 4 / 1
Регистрация: 16.10.2009
Сообщений: 38
03.07.2013, 12:01 7
Vorona, Большое спасибо, сегодня покурю эти мануалы.
0
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
05.07.2013, 16:51  [ТС] 8
Цитата Сообщение от mobidevelop Посмотреть сообщение
Еще можно через dispatch_after сделать. Кода много меньше получится. И таймер релизить не придется ;-)
Честно говоря так и не поняла как решить мою задачу с помощью dispatch_after.
Он же вроде просто задерживает выполнение. Тогда это ничем не отличается от sleep.
А нужно чтобы он, например, 5 секунд считывал буффер, а если нашел то,что нужно раньше, то продолжил выполнение программы, если в течение 5 сек не нашел, то, значит, тоже продолжил выполнение.

Так что, к сожалению, придется юзать таймер в цикле =(
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
05.07.2013, 19:35 9
Так же, как и с таймером. Т.е. в блоке (или в методе таймера) взвести флажок хватитЧитать (или соединение закрыть).
0
98 / 6 / 1
Регистрация: 14.05.2013
Сообщений: 50
09.07.2013, 19:40  [ТС] 10
Всем спасибо.
Вот, что получилось.

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
{
    isAnalysed=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;
}
Добавлено через 1 час 11 минут
И еще один вопрос. С точки зрения чистого кода, как правильнее писать в методе...
Например,
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@implementation MyClass : NSObject
 
+(void) method
{
 
}
 
+(void) mainMethod
{
    [self method];      // 1
    [MyClass method]; // 2
}
 
@end
Какой вариант корректее?
Я думаю, что 2. Это же метод класса, а не объекта.

Добавлено через 16 минут
Цитата Сообщение от di_ingenio Посмотреть сообщение
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
* * * * if(!isAnswerCame)
* * * * {
* * * * * * [BufferCom interruptAnalys];
* * * * }
* * });
Если проходит больше 1 секунд, то должен выполниться этот участок кода. Но, к сожалению, не выполняется. Подскажите, где косяк?
0
09.07.2013, 19:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2013, 19:40
Помогаю со студенческими работами здесь

При randomize timer: пишет invalid outside procedure и указывает на randomize Timer
почему в к примеру таком коде: Randomize Timer Dim tm As Integer Private Sub Timer1_Timer() tm...

System.Timers.Timer vs System.Threading.Timer
System.Timers.Timer vs System.Threading.Timer. в чем разница если можно примеры....

Timer
привет всем. есть 1 таймер для подсчета времени работы проги. есть label, в который загружается...

Timer
Как сделать чтобы через какоэта время добавлялось к метке случайное число? Зарание спасибо.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru