Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/41: Рейтинг темы: голосов - 41, средняя оценка - 4.56
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
1

Затормозить выполнение программы на 5 секунд (без Sleep)

16.06.2011, 01:41. Показов 8167. Ответов 42
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
как затормозить выполнение программы на 5 секунд,не пребегая к sleep
есть вариант циклом,но какое количество повторов ставить,чтобы было ровно 5 сек?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2011, 01:41
Ответы с готовыми решениями:

Как замедлить выполнение for без Sleep
Хаюши умные дядьки такая проблема надо замедлить выполнение int qwe=10, asd=0, zxc=500; for...

Остановить выполнение программы. Sleep
Нужно остановить время на одну секунду. Пробовал Thread.sleep(), TimeUnit.SECONDS.sleep(), wait()....

Sleep без зависания программы
Как выполнить sleep без зависания программы?

Срабатывание программы в зависимости от времени без цикла и Sleep
Доброго времени. Код простой, раз в 4 часа в 1:58, 5:58, 9:58, 13:58, 17:58 и 21:58 выполняет...

42
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
16.06.2011, 05:13 2
Можно ставить таймер. Либо на форму кидай, либо вывызвай системный. В твоём случае рекомендую - кинуть на форму таймер, и задать ему свойство Enabled равное False;
В нейм самом на обработчик его события:
Delphi
1
2
Timer1.Enabled := False;
Event();
Где Event - твоя процедура/действие, которое надо совершить через Timer1.Interval миллисекунд.
1
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
16.06.2011, 09:55 3
Цитата Сообщение от spydark91 Посмотреть сообщение
как затормозить выполнение программы на 5 секунд,не пребегая к sleep
есть вариант циклом,но какое количество повторов ставить,чтобы было ровно 5 сек?
поток
1
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
16.06.2011, 09:57 4
Тоже можно.

Не по теме:

И тогда в потоке sleep применишь, он не повлияет на работу программы.

0
2184 / 1254 / 143
Регистрация: 28.04.2010
Сообщений: 4,592
16.06.2011, 10:27 5
deathNC, зачем sleep поток можно приостановить с помощью метода Suspend
и вновь запустить с помощью Resume

Добавлено через 48 секунд
ааа ну хотя проблема с отсчетом времени
0
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
16.06.2011, 11:35 6
anonimus, можно и suspend, в принципе, если захотеть
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.06.2011, 11:57  [ТС] 7
уменя сделано в 2 потока
1:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
try
  IdSMTP1.Connect();
  sleep(5000);
  IdSMTP1.Send(IdMessage1);
  IdSMTP1.Disconnect;
  busy(false);
  timer1.Enabled:=false;
Except
  busy(false);
  timer1.Enabled:=false;
  application.MessageBox('Проверьте поделючение к Интернету и перезапустите программу','Ошибка подключения к Интернету',0);
end;
процедура busy
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure Busy(Busy: boolean);
begin
  if Busy then
    begin
      screen.cursor := crHourglass;
      statysbusy.visible:=true;
    end
  else
    begin
      screen.cursor := crDefault;
      statysbusy.visible:=false;
    end;
end;
2 форма:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure Tstatysbusy.Timer1Timer(Sender: TObject);
var p,m:integer;
begin
if unit2.stat=0 then
 begin
   p:=p+1;
   ProgressBar1.Position:= p;
     if i=0 then
       begin
         label1.Caption:='Посылаем данные о подключении.';
         i:=1;
       end;
     if i=1 then
       begin
         label1.Caption:='Посылаем данные о подключении..';
         i:=2;
       end;
     if i=2 then
       begin
         label1.Caption:='Посылаем данные о подключении...';
         i:=0;
       end;
end
в таймере интервал 500
она появляется поверх первой

должны кататься точечки и бар
но точечки не катаются и бар сразу же появляется на половине и замирает

Добавлено через 39 секунд
я думал это изза ого,что начинается sleep(5000)
но ведь это другой поток..
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
16.06.2011, 13:38 8
Цитата Сообщение от spydark91 Посмотреть сообщение
я думал это изза ого,что начинается sleep(5000)
но ведь это другой поток..
поток это кое что другое, не то о чем ты думаешь
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.06.2011, 14:22  [ТС] 9
ведь это 2 разных юнита
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
16.06.2011, 14:38 10
поток, это Thread - это такой класс, запускающий отдельную программу/процедуру, для которой процессор выделяет свое отдельное место и вставит в очередь для обработки, если не использовать его то программа - считается одним целым потоком, на нее выделяется время и все ресурсы необходимые, а не на отдельную часть

Добавлено через 11 минут
вот пример таймера, без зависания приложения, через Sleep
Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
type
  TMyThread = class(TThread)
  protected
    procedure Execute; override;
  end;
var
  Form1: TForm1;
  MyThread: TMyThread;
implementation
 
{$R *.dfm}
 
procedure TMyThread.Execute;
 
var i: Integer;
begin
  for i := 0 to 10000 do
    begin
      Form1.Label1.Caption := IntToStr(i);
      Sleep(100);
    end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyThread := TMyThread.Create(False);
end;
 
end.
Добавлено через 2 минуты
Такие дела как с интернетом или что-то посчитать, короче программы которые могут повесить программу запихивают в поток в отдельный
1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.06.2011, 17:09  [ТС] 11
сожно ли в процедуру procedure TMyThread.Execute;
поместить procedure Tstatysbusy.Timer1Timer(Sender: TObject);?
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
16.06.2011, 17:18 12
Цитата Сообщение от spydark91 Посмотреть сообщение
сожно ли в процедуру procedure TMyThread.Execute;
поместить procedure Tstatysbusy.Timer1Timer(Sender: TObject);?
если это сделать, то это будет равносильно сравнению "красный" и "бумажный" или "зеленый" и "теплый" - то есть бессмысленица

переделай эту штуку так, в Sleep(1000), а в цикл do 5 и посчитает он до 5 секунд

Согласен?

Добавлено через 3 минуты
и процедура Execute вызывается автоматически, если запустить поток - это главная процедура выполнения потока
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.06.2011, 17:20  [ТС] 13
мне надо будет включаьт ее и выключать те timer.enable:=false/true
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
16.06.2011, 17:25 14
ну включай и выключай поток Suspend - остановить, Resume - возобновить
1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.06.2011, 17:27  [ТС] 15
вообще ничего не катается,где ошибся?
Delphi
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls;
 
type
  Tstatysbusy = class(TForm)
    ProgressBar1: TProgressBar;
    Label1: TLabel;
    Timer1: TTimer;
 
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  TMyThread = class(TThread)
  ProgressBar1: TProgressBar;
  Label1: TLabel;
  protected
    procedure Execute; override;
  end;
 
var
  statysbusy: Tstatysbusy;
  i,c:integer;
  MyThread: TMyThread;
 
implementation
uses unit2, Unit7;
 
{$R *.dfm}
procedure TMyThread.Execute;
var p,m,ii:integer;
begin
for ii:=1 to 10 do
begin
if unit2.stat=0 then
 begin
   p:=p+1;
   ProgressBar1.Position:= p;
     if i=0 then
       begin
         label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè.';
         i:=1;
       end;
     if i=1 then
       begin
         label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè..';
         i:=2;
       end;
     if i=2 then
       begin
         label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè...';
         i:=0;
       end;
end
  else if unit2.stat=1 then
    begin
     if i=0 then
       begin
         label1.Caption:='Èíôîðìèðóåì î âûõîäå.';
         i:=1;
       end;
     if i=1 then
       begin
         label1.Caption:='Èíôîðìèðóåì î âûõîäå..';
         i:=2;
       end;
     if i=2 then
       begin
         label1.Caption:='Èíôîðìèðóåì î âûõîäå...';
         i:=0;
       end;
    end;
  //óäàëåíèå ìîåãî ïèñüìà
 
sleep(500);
end;
 
 
 
 
 
 
 
 
end;
 
 
procedure Tstatysbusy.FormCreate(Sender: TObject);
begin
i:=0;
end;
 
procedure Tstatysbusy.FormPaint(Sender: TObject);
begin
if unit2.stat=0 then
  ProgressBar1.Max:=10;
end;
 
end.
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
16.06.2011, 17:30 16
эх... когда ж ты научишься смотреть прошлый материал...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
// останавливаем
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyThread := TMyThread.Create(False);
  MyThread.Suspend;
end;
//запускаем
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyThread := TMyThread.Create(False);
  MyThread.Resume;
end;
1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.06.2011, 17:38  [ТС] 17
ошибка..
Delphi
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls;
 
type
  Tstatysbusy = class(TForm)
  ProgressBar1: TProgressBar;
  Label1: TLabel;
 
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormHide(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  TMyThread = class(TThread)
  ProgressBar1: TProgressBar;
  Label1: TLabel;
  protected
    procedure Execute; override;
  end;
 
var
  statysbusy: Tstatysbusy;
  i,c:integer;
  MyThread: TMyThread;
 
implementation
uses unit2, Unit7;
 
{$R *.dfm}
procedure TMyThread.Execute;
var p,m,ii:integer;
begin
for ii:=1 to 10 do
begin
if unit2.stat=0 then
 begin
   p:=p+1;
   ProgressBar1.Position:= p;
     if i=0 then
       begin
         label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè.';
         i:=1;
       end;
     if i=1 then
       begin
         label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè..';
         i:=2;
       end;
     if i=2 then
       begin
         label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè...';
         i:=0;
       end;
end
  else if unit2.stat=1 then
    begin
     if i=0 then
       begin
         label1.Caption:='Èíôîðìèðóåì î âûõîäå.';
         i:=1;
       end;
     if i=1 then
       begin
         label1.Caption:='Èíôîðìèðóåì î âûõîäå..';
         i:=2;
       end;
     if i=2 then
       begin
         label1.Caption:='Èíôîðìèðóåì î âûõîäå...';
         i:=0;
       end;
    end;
  //óäàëåíèå ìîåãî ïèñüìà
 
sleep(500);
end;
 
 
 
 
 
 
 
 
end;
 
 
procedure Tstatysbusy.FormCreate(Sender: TObject);
begin
i:=0;
MyThread := TMyThread.Create(true);
 
end;
 
procedure Tstatysbusy.FormPaint(Sender: TObject);
begin
if unit2.stat=0 then
  ProgressBar1.Max:=10;
end;
 
procedure Tstatysbusy.FormShow(Sender: TObject);
begin
MyThread.resume;
 
end;
 
procedure Tstatysbusy.FormHide(Sender: TObject);
begin
MyThread.Suspend;
end;
 
end.
Миниатюры
Затормозить выполнение программы на 5 секунд (без Sleep)  
0
БогДелфей
16.06.2011, 17:45
  #18

Не по теме:

всётаки поток навязали:D

0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
16.06.2011, 17:49 19
да Господи ты Боже мой...

где создание класса?

Delphi
1
  MyThread := TMyThread.Create(False);
Добавлено через 1 минуту

Не по теме:

ты прям как Vallerik блин...

Иди лучше сначала изучи все с чем ты хочешь работать, потом изобретай, а то не зная ничего - изобретаю велосипед

0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.06.2011, 17:51  [ТС] 20
Delphi
1
2
3
4
rocedure Tstatysbusy.FormCreate(Sender: TObject);
begin
i:=0;
MyThread := TMyThread.Create(true);
строка 101

Добавлено через 1 минуту
"Create(CreateSuspended: Boolean) - создает экземпляр класса. Параметр CreateSuspended указывает на то, нужно ли создавать приостановленную задачу (True), или запускать ее сразу (False);"только я его сразу не запускаю
0
16.06.2011, 17:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2011, 17:51
Помогаю со студенческими работами здесь

Выполнение программы без установки .NET FRAM
Я написал прогу для удаления RECENT файлов. На занова установленных Windows ОС компах не...

Выполнение sleep после перенаправления
Нужно что бы sleep (и все что будет после окончания sllep) начинал свое выполнение только после...

Как сделать паузу без подвисания и без вызова Sleep?
Здравствуйте, как можно сделать паузу без "второго" потока и вешания программы посредством...

Запретить выполнение кода после Sleep
Добрый вечер всем! Помогите плиз начинающему. Программа разыгрывает скидку для клиентов магазина...


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

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