Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/72: Рейтинг темы: голосов - 72, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 16.11.2009
Сообщений: 4

Работа с таймером

16.11.2009, 21:05. Показов 14686. Ответов 7

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Я в программировании новичек. прошу сильно не ругать.
Излогаю задачу.
У меня есть программа написанная на C++ под Linux. Компиляцию провожу сам. так что изменить код могу легко.
Мне нужно добавить в программу систему таймера. Но не просто таймер. Нужно что бы при запуске программы стартовал таймер с 15 минутным отсчетом.
Но когда в окно программы. вводиш определенный пароль, таймер устанавливался на 48 часов.
Если в течении этих 48 часов в окно прогарммы не ввести пароль повторно. Таймер удаляет сам себя вместе с программой в которой расположен.
Надеюсь проблему описал понятно и найдутся люди которые смогут мне помочь в ее решении.
Зарание большое спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.11.2009, 21:05
Ответы с готовыми решениями:

Работа с таймером
Доброго времени суток, вот вообщем делаю девушке лабараторную работу типа светафор, и вообщем есть на форме 3 таймера, все работает, но...

Работа с таймером
Суть задания такое: выводятся 3 вопроса из (label) и надо ответить на них в (edit) пользователь устанавливает время на вопрос, если...

Работа с таймером(?)
Доброго времени суток. Подскажите пожалуйста, никак не могу понять даже с чего начать. Необходимо написать маленькую программку, в которой...

7
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
16.11.2009, 21:38
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
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <time.h>
 
#define PRETIME  15*60       /* 15 минут */
#define POSTTIME 48*60*60    /* 48 часов */
 
void
alarm_handler(int signo)
{
    printf("Пароль не введен!\n");
    exit(-1);
}
 
int
main(void)
{
    /* сигнализация на SIGALRM */
    signal(SIGALRM, alarm_handler);
 
    alarm(PRETIME);    /* начальный таймер */
 
    while(1) {
        /* здесь ввод пароля */
 
        alarm(POSTTIME);    /* таймер после ввода пароля */
    }
 
    return 0;
}
2
0 / 0 / 0
Регистрация: 16.11.2009
Сообщений: 4
17.11.2009, 00:51  [ТС]
Спасибо за сам таймер. Но моих знаний видимо маловато что бы закончить весь скрипт. Попробовал собрать то что вы написали. Файл выводит сообщение "Пароль не введен и завершает работу. Оно и понятно ведь сразу после
printf("Пароль не введен!\n");

стоит
exit(-1);
Что говорит программе завершиться.
А мне нужно что бы сразу включался таймер 1 и выводился запрос на ввод пароля
и только если пароль введен переходить на таймер 2. Но если пароль не введен завершить работу. Если введен продолжить работу и в конце срока выдать снова запрос на ввод пароля.
Примерно по данному скрипту я представляю так

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
41
42
43
44
45
46
47
48
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <time.h>
 
#define PRETIME  15*60       /* 15 минут */
#define POSTTIME 48*60*60    /* 48 часов */
#define PASSWORD 123456      /*Пароль*/
struct Timer
{
uint32 Timer1_Timer;
uint32 Timer2_Timer;
void Reset()
    {
        Timer1_Timer = (PRETIME);
        Timer2_Timer = (POSTTIME);
        Timer3_Timer = (PRETIME);
     }
int Master:: Run(const InsertPass)
   {
       /* сигнализация на SIGALRM */
    alarm_handler(PRETIME);    /* начальный таймер */
    signal(SIGALRM, alarm_handler);
    print ("Пароль не введен");
    print ("Введите пароль");
    if (!(InsertPass == "")) 
        {
        InsertPass = "" ; 
        }
    }
void main(const uint32 diff)
        
         if (PASSWORD ==InserPass) /*если пароль верный*/
           {
          Timer2_Timer -=diff; /*Сбрасываем таймер на начало*/
          InserPass = 0; /*И сбрасываем пароль*/
        else 
          exit(-1);  /*В противном случае */
       }
          if (Timer3_Timer <= diff) /*Если время таймера 3 подошло*/
              {
             print ("Введите пароль");
            if (!(InsertPass == "")) 
        {
        InsertPass = "" ; 
        }
return;
             }
В общем что вроде того только мом знания слышком слабы что бы правильно это описать.
0
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
17.11.2009, 15:26
Цитата Сообщение от devil222 Посмотреть сообщение
А мне нужно что бы сразу включался таймер 1 и выводился запрос на ввод пароля
Ввод пароля уж как-нибудь сам мог бы прикрутить, ничего сложного там нет, даже и место указано комментариями.
Суть работы таймера здесь в том, что после вызова alarm() начинается отсчет времени. Когда время заканчивается, ядро посылает приложению сигнал SIGALRM. По умолчанию этот сигнал сразу завершает приложение, поэтому чтобы как-то сообщить пользователю, что он не ввел пароль, на сигнал заранее ставится обработчик (handler). Обработать сигнал ты можешь как тебе захочется, хоть выйти из программы, хоть продолжить работу.
0
0 / 0 / 0
Регистрация: 16.11.2009
Сообщений: 4
17.11.2009, 23:20  [ТС]
Долго мучаясь и почитав документацию, пришел вот к таком варианту. Только что то тут не верно. Подскажите пожалуйта что
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
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "stdio.h"
#include "stdlib.h"
#include "signal.h"
#include <time.h>
#include <stream.h>
 
#define PRETIME  10      
#define POSTTIME  30   
 
extern int tm_sec();
extern void signal();
void alarm_handler(int signo)
{
    printf("Пароль не введен!\n");
}
int sec = 10;
int
main(void)
{
    const float pass = 2323;
    char in, p;
    if (pass == '0')
    {
 
    signal(SIGALRM, alarm_handler);
    tm_sec(PRETIME);
    }
 
    while (1)
    {
    cout << "\n"; cin >> in >>p;
    switch(in)
    {
     if(in != '2323')
        {
        case 1:
        tm_sec(PRETIME);
        signal(SIGALRM, alarm_handler);
            if(alarm<=0)
            {
            exit(-1);
            }
        else
            case 2:
        tm_sec(POSTTIME);
            signal(SIGALRM, alarm_handler);
        
        }
        
    }
    }
    return 0;
}
Да и совсем забыл сказать, это все под линуксом.
0
 Аватар для Gravity
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
18.11.2009, 02:56
Давай ты сначала опишешь словами, по пунктам, логику того, что хочешь сделать? Иначе пустое занятие городить код методом тыка.
0
0 / 0 / 0
Регистрация: 16.11.2009
Сообщений: 4
18.11.2009, 03:20  [ТС]
Примерно так:
1 Запуск программы - стартует таймер1
2. Выдает запрос на ввод пароля
3. Проводит проверку пароля на совпадение с указанным
4. Ели провера удовлетворительна - включается таймер2
5 Если проверка не удовлетворительна - таймер1 продолжает отсчет
6. Когда таймер1 или таймер2 доходит до нулевой отмекти программа закрывается
7. Если во время хода таймера1 или таймера2 вводится правильный пароль таймер снова становится в начальное положение
8 . Если пароль не вводится или вводится не верный таймер1 все так же продолжает тикать
0
0 / 0 / 0
Регистрация: 29.12.2009
Сообщений: 7
29.12.2009, 17:53
Спасибо, Gravity вы мне очень помогли.

devil222, я думаю у вас должно быть нечто подобное:
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
#define TIMER1 10
#define TIMER2 20
int f;
 
void alarm_handler()
{
if (f<>1) 
   {
    printf("Time is over\n");
    exit(-1);
    } else password();
}
 
void password()
{
f=0;
alarm(TIMER1);
while (f<>1)
  {
    char *str;
   *str=reqest_password();//ваше получение пароля
    f=handle_password(str);//ваша обработка пароля: 0- неверно; 1-верно
   }
alarm(TIMER2);
}
int main()
{
signal(SIGALRM,alarm_handler);
password();
  // д-я программы
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.12.2009, 17:53
Помогаю со студенческими работами здесь

Работа с таймером
Всем привет! Есть ощущение, что этот объект вообще не рассмотрен ( Ничего не могу найти. Есть переменная a:=10:00:00; надо...

Работа с таймером
Помогите разобраться в организации работы с таймером. От программы требуется, чтобы каждые n секунд, число n берется из Edit2, свойство...

Работа с таймером
Подскажите пожалусто как сделать что бы при помощи таймера, после запуска приложения проходило 5 секунд и Label1 скрывался, а Button...

Работа с таймером
Здравствуйте, первый раз на этом форуме и в делфи, так что не обессудте. Вопрос такой: Как сделать таймер назад чтобы если в лейбле1...

Работа с таймером
Здравствуйте, помогите, пожалуйста. Есть код, но пишет несовпадение типов. Как это можно исправить? Option Explicit Dim min As...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru