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

Задержка времени - C++

Восстановить пароль Регистрация
 
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
02.11.2013, 15:40     Задержка времени #1
Здравствуйте!
Мне необходимо сделать задержку времени, чтобы перемещение элемента было помедленнее. Пробовала использовать Sleep(), но эта функция вешает всё приложение. Как можно по-другому сделать?
Вообще мне надо, чтобы при нажатии кнопки "рассчитать" высветились расчёты и началось движение круга, но в итоге получается, что расчёты не высвечиваются до тех пор, пока круг не закончит своё движение.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 15:40     Задержка времени
Посмотрите здесь:

C++ Задержка в микроседундах
C++ Задержка экрана
C++ Задержка вывода
задержка времени C++
Задержка в цикле на С C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
02.11.2013, 15:54     Задержка времени #2
TyLinka, можете таймер добавить. На каждое срабатывание будет происходить часть движения. Но если надо именно задержку, там вроде что то дописать нужно...
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
02.11.2013, 16:59  [ТС]     Задержка времени #3
Цитата Сообщение от Folko Посмотреть сообщение
TyLinka, можете таймер добавить. На каждое срабатывание будет происходить часть движения. Но если надо именно задержку, там вроде что то дописать нужно...
А можно про таймер поподробнее?
rpsv
15 / 46 / 3
Регистрация: 14.10.2013
Сообщений: 161
02.11.2013, 17:05     Задержка времени #4
TyLinka, вам нужно 2 потока создать:
1) движение круга
2) вывод расчетов

Делается это средствами WinAPI, функция CreateThread

Полезные сайты: http://www.vsokovikov.narod.ru/New_M...eatethread.htm , http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

P.S. а вообще почему бы сначала не вывести расчеты, а потом двигать круг)))
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
02.11.2013, 17:38  [ТС]     Задержка времени #5
Цитата Сообщение от rpsv Посмотреть сообщение
TyLinka, вам нужно 2 потока создать:
1) движение круга
2) вывод расчетов

Делается это средствами WinAPI, функция CreateThread

Полезные сайты: http://www.vsokovikov.narod.ru/New_M...eatethread.htm , http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

P.S. а вообще почему бы сначала не вывести расчеты, а потом двигать круг)))
Я делаю в windows forms. Если честно, я пыталась сначала вывести, а потом двигать, но не получилось
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
02.11.2013, 18:17     Задержка времени #6
TyLinka, обычно есть объекты типа Timer. Он выносится на форму, у него есть набор параметров и событий. Вот задаете ему нужное время и он через каждый промежуток времени будет срабатывать. В событии срабатывания вы помещаете свой код, который, например сдвигает код. Готово)
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
02.11.2013, 21:04  [ТС]     Задержка времени #7
Цитата Сообщение от Folko Посмотреть сообщение
TyLinka, обычно есть объекты типа Timer. Он выносится на форму, у него есть набор параметров и событий. Вот задаете ему нужное время и он через каждый промежуток времени будет срабатывать. В событии срабатывания вы помещаете свой код, который, например сдвигает код. Готово)
А можно пример, пожалуйста? А то я что-то не очень понимаю, как это реализуется...
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
02.11.2013, 21:55     Задержка времени #8
TyLinka, ну вот например (возьму за пример c++ builder). Выношу на форму объект Ttimer, затем в его свойстах указываю интервал 1000 (1 секунду). Затем кликаю на событие Timer или как то так... И прописываю там, например t = t + 2;
И все, теперь каждую секунду таймер срабатывает и выполняет t = t + 2. Ну и глобальная переменная t с каждой секундой меняет свое значение. Или как пример не t = t + 2, а написать там вызов функции обновления статуса выполнения какого либо действия.
Пример кода привести не смогу, не могу найти в qt таймера)

Добавлено через 7 минут
TyLinka, вот тут посмотрите, третья лабораторная работа, вроде инструкции по выполнению задачи с использованием таймера http://www.nulled.cc/threads/236172/
rpsv
15 / 46 / 3
Регистрация: 14.10.2013
Сообщений: 161
04.11.2013, 15:56     Задержка времени #9
Цитата Сообщение от TyLinka Посмотреть сообщение
Я делаю в windows forms. Если честно, я пыталась сначала вывести, а потом двигать, но не получилось
В WinForms есть класс Thread - это потоки!

Вот пример:
- после нажатия на кнопу:
1) в 1 нити элемент Label1 движется (вместо вам надо сделать круг)
2) в 2 нити считается уравнение и пишется в список ListBox1

* Sleep() - в функции замораживает ТОЛЬКО ту нить из которой она вызвана!

Вот ссылки полезные:

- Про Invoke: Как пользоваться событиями или как управлять формой из потока?
- Про Thread: http://msdn.microsoft.com/ru-ru/libr...v=vs.110).aspx

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
//
// Заполняем список
//
public: void Filling_listbox()
{
    for (int i = 0; i < 100; i++)
    {
        //
        // Изменяем список из НЕ родительского потока
        //
        listBox1->Invoke(gcnew Action<double>(this, &Form1::Add_listbox),
                            Math::Sin(i));
        Thread::Sleep(100);
    }
}
 
public: void Add_listbox(double value)
{
    this->listBox1->Items->Add(value);
}
 
//
// Двигаем label
//
public: void Moving_label()
{
    for (int i = 0; i < 100; i++)
    {
        this->label1->Invoke(gcnew Action<int>(this, &Form1::Add_point_x), i);
        Thread::Sleep(10);
    }
}
 
public: void Add_point_x(int i)
{
    this->label1->Location = Point(i + 25, 25);
}
 
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e)
{
    Thread^ t1 = gcnew Thread( gcnew ThreadStart( this, &Form1::Filling_listbox ));
    Thread^ t2 = gcnew Thread( gcnew ThreadStart( this, &Form1::Moving_label ));
    //
    t1->Start();
    t2->Start();
}
Вложения
Тип файла: rar thread_test.rar (673.0 Кб, 5 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2013, 16:15     Задержка времени
Еще ссылки по теме:

C++ Задержка в приложении
Задержка C++
задержка сигнала c++ C++

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

Или воспользуйтесь поиском по форуму:
TyLinka
32 / 32 / 11
Регистрация: 02.02.2012
Сообщений: 177
04.11.2013, 16:15  [ТС]     Задержка времени #10
Спасибо, как-нибудь попробую так сделать, интересный вариант. Я сделала с timer пока.
Yandex
Объявления
04.11.2013, 16:15     Задержка времени
Ответ Создать тему
Опции темы

Текущее время: 10:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru