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

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

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

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

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

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

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

42
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
16.06.2011, 17:53
Студворк — интернет-сервис помощи студентам
я молчу !!!!!!!!!!!!!!!!!
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
16.06.2011, 18:08  [ТС]
так
Delphi
1
2
3
4
5
procedure Tstatysbusy.FormCreate(Sender: TObject);
begin
i:=0;
MyThread := TMyThread.Create(false);
MyThread.Suspend;
он основную форму не показывает даже..

Добавлено через 11 минут
ну хватит молчать
я же все так делаю:
1 создаю поток,но не запуская
2 при открытии формы запускаю поток
3 при закрытии выключаю
а он мне ошибками кидается
0
16.06.2011, 18:17

Не по теме:

икада бы не стал использовать поток для задержки:smoke:

0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
17.06.2011, 01:00  [ТС]
там в этом потоке еще будет кое что выполняться

Добавлено через 16 минут
ну помогите до конца пожалуйста

Добавлено через 6 часов 22 минуты
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
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)
 
 
  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;
   statysbusy.ProgressBar1.Position:= p;
     if i=0 then
       begin
         statysbusy.label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè.';
         i:=1;
       end;
     if i=1 then
       begin
         statysbusy.label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè..';
         i:=2;
       end;
     if i=2 then
       begin
         statysbusy.label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè...';
         i:=0;
       end;
end
  else if unit2.stat=1 then
    begin
     if i=0 then
       begin
         statysbusy.label1.Caption:='Èíôîðìèðóåì î âûõîäå.';
         i:=1;
       end;
     if i=1 then
       begin
        statysbusy.label1.Caption:='Èíôîðìèðóåì î âûõîäå..';
         i:=2;
       end;
     if i=2 then
       begin
         statysbusy.label1.Caption:='Èíôîðìèðóåì î âûõîäå...';
         i:=0;
       end;
  //óäàëåíèå ìîåãî ïèñüìà
     end
  else if unit7.stat=3 then
     begin
   p:=p+1;
   statysbusy.ProgressBar1.Position:= p;
     if i=0 then
       begin
         statysbusy.label1.Caption:='Ôîðìèðóåì ñïèñîê.';
         i:=1;
       end;
     if i=1 then
       begin
         statysbusy.label1.Caption:='Ôîðìèðóåì ñïèñîê..';
         i:=2;
       end;
     if i=2 then
       begin
         statysbusy.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.

тфу тфу тфу ошибок нет,но он и не катается..почему?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
17.06.2011, 01:14
потому что в True он в остановленном режиме в False в рабочем
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
17.06.2011, 01:22  [ТС]
в главной форме я вызываю busy
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    procedure TForm2.Busy(Busy: boolean);
begin
  if Busy then
    begin
      screen.cursor := crHourglass;
      statysbusy.visible:=true;
      statysbusy.Show;
    end
  else
    begin
      screen.cursor := crDefault;
      statysbusy.Hide;
    end;
end;
statysbusy.Show;
там прописано чтобы при событии оншоу начинал работать поток
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
17.06.2011, 01:29
ну и я говорю, поставь в False и следующей строкой останови его, иначе он не запущен, ты можешь послушать и сделать так, как тебе говорят? в моем примере видел как сделано? в самом первом

удачи тебе запустить все, а я спать пойду, спокойно ночи, да чтоб тебе поток приснился
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
17.06.2011, 01:35  [ТС]
хаха))спокойной ночи)

Добавлено через 3 минуты
Delphi
1
2
3
4
5
procedure Tstatysbusy.FormCreate(Sender: TObject);
begin
i:=0;
MyThread := TMyThread.Create(false);
MyThread.Suspend;
и серавно не катается!
пойдут тоже посплю,может реально приснится))
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
17.06.2011, 07:15
А почему не сделать так:

Delphi
1
2
3
MyThread := TMyThread(True);
//делаем что нужно
MyThread.Resume; // Запускаем поток
А то у вас там тот огромный цикл по ходу сразу запускается.

Не по теме:

Хотя, может я чего и упустил на предыдущих страницах этой темы!

0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
17.06.2011, 21:53  [ТС]
цмкл находится в потоке,поток запускается и сразу тормозит,потом запускается когда нужно и начинает выполняться цикл,разве нет?

Добавлено через 10 часов 18 минут
вернитесь сюда
0
 Аватар для deathNC
1905 / 1016 / 123
Регистрация: 08.12.2009
Сообщений: 2,792
Записей в блоге: 2
17.06.2011, 22:26
Если создали поток запущеным - то код начинает выполняться. Конечно, Suspend его останавливает, но я всё же рекоммендую создавать поток остановленным, а потом запускать через Resume;
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
17.06.2011, 23:01  [ТС]
у меня собственно так и сделано
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
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;
но не работает(
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
19.06.2011, 15:35  [ТС]
лююди?
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
20.06.2011, 21:14  [ТС]
сделал так
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
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 }
    procedure OnMyMess(var Mess : TMessage); message WM_USER+1;
  public
    { Public declarations }
  end;
type
  TMyThread = class(TThread)
 
 
  protected
    procedure Execute; override;
  end;
 
var
  statysbusy: Tstatysbusy;
  i,c:integer;
  MyThread: TMyThread;
 
implementation
uses unit2, Unit7;
 
{$R *.dfm}
procedure TMyThread.Execute;
begin
SendMessage(statysbusy.handle, WM_USER+1, 0, 0);
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;
 
procedure Tstatysbusy.OnMyMess(var Mess: TMessage);
var p,m,ii:integer;
begin
for ii:=1 to 4 do
begin
if unit2.stat=0 then
 begin
   p:=p+1;
   statysbusy.ProgressBar1.Position:= p;
     if i=0 then
       begin
         statysbusy.label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè.';
         i:=1;
       end;
     if i=1 then
       begin
         statysbusy.label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè..';
         i:=2;
       end;
     if i=2 then
       begin
         statysbusy.label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè...';
         i:=0;
       end;
end
  else if unit2.stat=1 then
    begin
     if i=0 then
       begin
         statysbusy.label1.Caption:='Èíôîðìèðóåì î âûõîäå.';
         i:=1;
       end;
     if i=1 then
       begin
        statysbusy.label1.Caption:='Èíôîðìèðóåì î âûõîäå..';
         i:=2;
       end;
     if i=2 then
       begin
         statysbusy.label1.Caption:='Èíôîðìèðóåì î âûõîäå...';
         i:=0;
       end;
  //óäàëåíèå ìîåãî ïèñüìà
     end
  else if unit7.stat=3 then
     begin
   p:=p+1;
   statysbusy.ProgressBar1.Position:= p;
     if i=0 then
       begin
         statysbusy.label1.Caption:='Ôîðìèðóåì ñïèñîê.';
         i:=1;
       end;
     if i=1 then
       begin
         statysbusy.label1.Caption:='Ôîðìèðóåì ñïèñîê..';
         i:=2;
       end;
     if i=2 then
       begin
         statysbusy.label1.Caption:='Ôîðìèðóåì ñïèñîê...';
         i:=0;
       end;
 
     sleep(500);
     end;
 
end;
 
end;
end.
дает 2 ошибки
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
20.06.2011, 21:15  [ТС]
первая
Миниатюры
Затормозить выполнение программы на 5 секунд (без Sleep)  
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
20.06.2011, 21:17  [ТС]
вторая
Миниатюры
Затормозить выполнение программы на 5 секунд (без Sleep)  
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
20.06.2011, 21:24
попробуй на кнопки поставить, эти все коды, потом дальше думай, если заработает, мне кажется криты выскакивают из за того что, при показе формы сразу стартует поток когда еще форма не успела прогрузиться, так же и с закрытием ее
1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
20.06.2011, 21:52  [ТС]
да,на кнопке все работает
а куда мне тогда вставить все это?
0
 Аватар для Arcor
5709 / 2300 / 466
Регистрация: 20.11.2009
Сообщений: 7,721
Записей в блоге: 1
20.06.2011, 21:55
Цитата Сообщение от spydark91 Посмотреть сообщение
да,на кнопке все работает
а куда мне тогда вставить все это?
а раньше это сказать нельзя было? я то думал вообще не работает, ну скажем при открытии формы поставь таймер, и как таймер будет 1-2 секундам, запустить поток
1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
20.06.2011, 23:02  [ТС]
тока этот поток всего должен прожить 2 секунды

Добавлено через 1 час 0 минут
у таймера интервал 100
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
123
124
125
126
127
128
129
130
131
132
133
134
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 Timer1Timer(Sender: TObject);
    procedure FormHide(Sender: TObject);
  private
    { Private declarations }
    procedure OnMyMess(var Mess : TMessage); message WM_USER+1;
  public
    { Public declarations }
  end;
type
  TMyThread = class(TThread)
 
 
  protected
    procedure Execute; override;
  end;
 
var
  statysbusy: Tstatysbusy;
  i,c:integer;
  MyThread: TMyThread;
 
implementation
uses unit2, Unit7;
 
{$R *.dfm}
procedure TMyThread.Execute;
begin
SendMessage(statysbusy.handle, WM_USER+1, 0, 0);
end;
 
procedure Tstatysbusy.FormCreate(Sender: TObject);
begin
i:=0;
end;
 
procedure Tstatysbusy.OnMyMess(var Mess: TMessage);
var p,m,ii:integer;
begin
for ii:=1 to 8 do
begin
if unit2.stat=0 then
 begin
   p:=p+1;
   statysbusy.ProgressBar1.Position:= p;
     if i=0 then
       begin
         statysbusy.label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè.';
         i:=1;
       end;
     if i=1 then
       begin
         statysbusy.label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè..';
         i:=2;
       end;
     if i=2 then
       begin
         statysbusy.label1.Caption:='Ïîñûëàåì äàííûå î ïîäêëþ÷åíèè...';
         i:=0;
       end;
end
  else if unit2.stat=1 then
    begin
     if i=0 then
       begin
         statysbusy.label1.Caption:='Èíôîðìèðóåì î âûõîäå.';
         i:=1;
       end;
     if i=1 then
       begin
        statysbusy.label1.Caption:='Èíôîðìèðóåì î âûõîäå..';
         i:=2;
       end;
     if i=2 then
       begin
         statysbusy.label1.Caption:='Èíôîðìèðóåì î âûõîäå...';
         i:=0;
       end;
  //óäàëåíèå ìîåãî ïèñüìà
     end
  else if unit7.stat=3 then
     begin
   p:=p+1;
   statysbusy.ProgressBar1.Position:= p;
     if i=0 then
       begin
         statysbusy.label1.Caption:='Ôîðìèðóåì ñïèñîê.';
         i:=1;
       end;
     if i=1 then
       begin
         statysbusy.label1.Caption:='Ôîðìèðóåì ñïèñîê..';
         i:=2;
       end;
     if i=2 then
       begin
         statysbusy.label1.Caption:='Ôîðìèðóåì ñïèñîê...';
         i:=0;
       end;
 
     sleep(250);
     end;
 
end;
 
end;
procedure Tstatysbusy.Timer1Timer(Sender: TObject);
begin
if unit2.stat=0 then
  ProgressBar1.Max:=10;
mythread:=tmythread.Create(false);
timer1.Enabled:=false;
end;
 
procedure Tstatysbusy.FormHide(Sender: TObject);
begin
mythread.Suspend;
end;
 
end.
не катается,но на кнопке каталось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.06.2011, 23:02

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru