Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
vvtereshkin
0 / 0 / 0
Регистрация: 06.07.2009
Сообщений: 3
1

Создать окно (форму) с отображением текущего времени без использования таймера

06.07.2009, 17:59. Просмотров 1924. Ответов 5
Метки нет (Все метки)

Тут вот наткнулся на такую задачку.
Создать окно (форму) с отображением текущего времени без использования
таймера. Для обновления времени использовать отдельный тред, сделать
кнопки "старт" и "стоп" по которым тред будет запускаться и останавливаться.
Не могу понять, что такое тред? и как это реализовать, если можете дайте подсказку...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2009, 17:59
Ответы с готовыми решениями:

Вычистить миллисекунды из текущего времени
Добрый день! Есть значение миллисекунд (к примеру равно 2000), есть текущее...

Отобразить форму по истечении таймера
В событии таймера вызываю Form3->ShowModal(); Как узнать, что Form3 уже...

Перенос времени (таймера) в строку Edit1
Доброго времени суток форумчане:) Сделал секундомер с двумя кнопками, старт и...

Вывод на график в режиме текущего времени температуры
Нужно мне температуру на график вывести. Таймер выдает с перерывом в 1...

как сделать вывод таймера на 2ю форму?
Вот таймер на одной форме , как сделать чтобы по нажатию batton таймер...

5
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
06.07.2009, 21:15 2
тред = Thread = отдельный поток
без таймера... хз... наверное так
1. при входе в поток узнать текущее время с точностью до милисекеунд
2. заснуть на такое время, чтобы проснуться на целой секунде
3. в потоку крутим цикл пока !exit
4. спим 1000 мс
5. чего-нибудь делаем
6. действия могут занять какое-то время, поэтому корректируем время ожидания (см. п.4)
7. goto 3
1
vvtereshkin
0 / 0 / 0
Регистрация: 06.07.2009
Сообщений: 3
07.07.2009, 14:39  [ТС] 3
Ну вообще-то становится немного понятнее, но нельзя было бы немного кода, как-то недопонимаю я. Может какую-то информацию про работу с потоками.
0
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
07.07.2009, 15:27 4
Ну вообще-то становится немного понятнее, но нельзя было бы немного кода, как-то недопонимаю я. Может какую-то информацию про работу с потоками.
Это поделие (Борланд) я не юзаю, так что увы, ничем помочь не могу.
1
TGrey[WoLf]
41 / 41 / 4
Регистрация: 14.09.2008
Сообщений: 683
07.07.2009, 15:34 5
Гугли
CreateThread - создание потока.
Для получения времени
SYSTEMTIME st;
GetLocalTime(&st);
1
Otaka
1829 / 687 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
07.07.2009, 18:51 6
В билдере(делфях), над потоками есть удобная обертка-TThread;
Просто наследуем его в дочерний класс и переписуем Execute в то, что нам нужно

Время получаем с помощью функции New() и класса TDateTime.
Собирая все в кучу выходит такая вот феня:
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
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
class TMyThr:public TThread
{
public:
__fastcall TMyThr(bool CS):TThread(CS){}
virtual void __fastcall Execute()
        {
        TDateTime d;
        while(1)
                {
                d=Now();
                Form1->Label1->Caption=d.TimeString();
                Sleep(1000);
                }
        }
};
TMyThr*clock;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
clock=new TMyThr(false);
}
//---------------------------------------------------------------------------
 
//Стоп
void __fastcall TForm1::Button1Click(TObject *Sender)
{
clock->Suspend();
}
//---------------------------------------------------------------------------
//продолжить отсчет
void __fastcall TForm1::Button2Click(TObject *Sender)
{
clock->Resume();
}
//---------------------------------------------------------------------------
Добавлено через 3 минуты 57 секунд
А можно и без создания отдельного потока.
кликай сюда:
http://www.cyberguru.ru/delphi-sourc...a-klavish.html

Добавлено через 6 минут 41 секунду
Только что сам попробовал то, что предложил во второй раз:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
Application->OnIdle=AppIdle;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AppIdle(System::TObject* Sender, bool &Done)
{
TDateTime d;
d=Now();
Label1->Caption=d.TimeString();
Done=false;
}
Программа загружает процик на 100% но это и понятно мы ведь не ожидаем сообщений, но зато без таймеров и тредов.

Добавлено через 1 минуту 54 секунды
Ой, я забыл добавить в AppIdle Sleep(10), теперь все в порядке.
1
07.07.2009, 18:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2009, 18:51

Сравнение части текста элемент ListBox и текущего времени
Здравствуйте. По лабораторной задание: создать программу напоминалку (ListBox...

Определение номера узла, текущего времени и таймера
Используя процедуры mpi_wtime, mpi_wtick, mpi_get_processor_name написать...

Как создать визуальный интерфейс (окно с элементами) на основе только кода c# - без использования XAML и WPF?
Интересуют примеры создания визуальных интерфейсов (окон с элементами) на...


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

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

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