Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 09.07.2011, 12:02
Аватар для Developer
Developer Developer вне форума
Прохожий
 
Регистрация: 01.07.2011
Адрес: Украина
Сообщения: 27
Версия Delphi: 7, 2009
Репутация: 75
По умолчанию

Цитата:
Сообщение от m1sclick
Вобщето она зависала еще тогда когда не было ни таймера ни goto я для этого и сделал в начале процедуры Application.Minimize что бы не мешала на экране.

Сам цикл виснет, когда нажимаю Button1 кнопка нажимается и остается нажатой пока цикл не закончиться и все это время ничего с программой ручками делать не могу.
Вот это не понял...
Вобще-то использовать "Goto" нерекомендовано. Не водном нормальном коде я "Goto" не встречал, разве что у людей, которые 2 дня на Delphi пишут. Избегай использование этой команды.

application.processmessages тормозит выполнение твоего кода на определенное время за которое выполняет обработку других сообщений, например прорисовку формы.

Так же твой код можно вынести в отдельный поток и тогда прорисовка формы и выполнение команд будет в основном потоке, а выполнение твоего кода в другом.
Ответить с цитированием
  #17  
Старый 09.07.2011, 13:03
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Цитата:
Сообщение от Developer
Избегай использование этой команды.
Что в ней такого плохого что все советуют избегать её? Мне кажется лучше две строки на goto чем в половину увеличивать код программы. Разве не так?
Цитата:
Сообщение от Developer
Так же твой код можно вынести в отдельный поток и тогда прорисовка формы и выполнение команд будет в основном потоке, а выполнение твоего кода в другом.
Это как такое делать? Я еще с потоками не знаком.

Application.ProcessMessages значительного эффекта не принес, с ним программа глючит жестко, то есть без него я совсем не могу ничего с окном делать, а с ней могу но это вызывает у меня еще большее раздражение, окно передвигается по экрану рывками и визуально, а может и программно программа работает медленнее.

Последний раз редактировалось m1sclick, 09.07.2011 в 13:25.
Ответить с цитированием
  #18  
Старый 09.07.2011, 13:58
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Делай тогда в потоке это все...
Ответить с цитированием
  #19  
Старый 09.07.2011, 14:35
Аватар для Developer
Developer Developer вне форума
Прохожий
 
Регистрация: 01.07.2011
Адрес: Украина
Сообщения: 27
Версия Delphi: 7, 2009
Репутация: 75
По умолчанию

В нете куча статей про потоки, например вот: ссылка
Ответить с цитированием
  #20  
Старый 09.07.2011, 19:19
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Жаль никто так и не ответил почему все так не любят goto?
Ответить с цитированием
  #21  
Старый 09.07.2011, 19:23
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от m1sclick
Жаль никто так и не ответил почему все так не любят goto?
https://secure.wikimedia.org/wikipedia/ru/wiki/Goto
Ответить с цитированием
  #22  
Старый 09.07.2011, 19:29
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Если Form2.CheckBox5.Checked=true
у тебя программа будет виснуть.
Код:
procedure TForm1.Button1Click(Sender: TObject);
label
  Guess;
begin
 acc.LoadFromFile('\FireString\acc.txt')

Guess:
for i:=0 to acc.Count - 1 do
begin
    Memo1.Lines.Add('');
  
  if Form2.CheckBox2.Checked then
  begin 
...................................   
  end;
end;
acc.Free;

if Form2.CheckBox5.Checked then
begin
  Application.Restore;
  Timer1.Enabled:=true;
  Timer1.Interval:=10000;
  Goto Guess;
end;

Application.Restore;

end;

Смотрим.
1. если Form2.CheckBox5.Checked=true
то
Timer1.Enabled:=true;
Timer1.Interval:=10000;
Что это нам даст? Неопнятно. Типа включим таймер, и?)
2.далее попадаем в цикл
for i:=0 to acc.Count - 1 do
в нем
3. if Form2.CheckBox2.Checked
если чекед выполняем действия с акками.
А если нет, то пустой цикл)))
4. Снова к п1.

Заметь таймер тут ни на что не влияет.
Выходит безконечный цикл.


Вывод: так не делают.
В онтаймер напиши код и задай интервал таймеру соответствующий.

Вот:
PHP код:
procedure TForm1.Timer1Timer(SenderTObject);
begin
 
if checkbox5.Checked then
  begin
    showmessage
('Мего авторизация 130 акков)');
  
end;
end

Последний раз редактировалось Konrad, 09.07.2011 в 20:10.
Ответить с цитированием
  #23  
Старый 09.07.2011, 20:10
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Konrad, ты что то явно не так понимаешь.
Мне и нужно что бы цикл при включенном CheckBox5 работал бесконечно долго потому что в GuessHand можно играть раз в пол часа, то есть если там стоит флажок первый раз цикл выполняется полностью, после окончания происходит проверка этого условия и если оно равно true программа должна останавливаться на полчаса а после проходить путь снова но уже только с логином и GuessHand в цикле.
Вроде все логично, но я уже сейчас подумываю над тем чтобы отказаться от этого перехода, а просто дописать еще часть кода потому что будет очень не удобно формировать отчет.

На счет таймера, я конечно не уверен но он вроде нормально работает. Я писал после:
Код:
Timer1.Enabled:=true;
  Timer1.Interval:=10000;
Memo1.Lines.Add:='shit';
И все нормально записывалось только я не уверен время ожидалось или нет.

Сейчас важно разобраться в потоках что бы потом можно было в любой момент выключить программу.
Ответить с цитированием
  #24  
Старый 09.07.2011, 20:14
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Цитата:
Сообщение от m1sclick
На счет таймера, я конечно не уверен но он вроде нормально работает. Я писал после:
Код:
Timer1.Enabled:=true;
  Timer1.Interval:=10000;
Что у тебя в онтаймер написано? думаю ничего.
А если ничего, то Timer1.Interval:=10000 ничего не значит
Это тебе не слип(300)


В том то и дело что интевал в пол часа ты нигде не используешь.
Прога у тебя зависает постоянно.
И прога не останавливается на полчаса.


Если сделать через онтаймер то каждые пол часа будет авторизация.
Тоесть при событий онтаймер происходит авторизация, Допустим чтото пошло не так, в проге повторяешь её 2-3 раза.
После этого ждешь 30 мин.
И вот те 30 мин прога ничего делать не будет и соответственно виснуть тоже И потоки тебе ни к чему, если только прога не зависает на авторизации, что врядли.


П.с.: если ты уверен что все гуд, то я ничем помочь не могу.
Удачи.

Последний раз редактировалось Konrad, 09.07.2011 в 20:25.
Ответить с цитированием
  #25  
Старый 09.07.2011, 20:30
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Теперь все понял, спасибо за совет, у меня и раньше так было я просто боялся что он не вернет управление с OnTimer обратно куда надо.

Назрел новый вопрос уже по таймеру. Как сделать так что бы после первого аккаунта начинался отсчет времени?
То есть когда первый раз цикл выполниться включается таймер, цикл дальше продолжается но таймер тикает, а потом когда время пройдет он снова запускал цикл.

Я что то совсем запутался, этот таймер он после его включения выполняет все что записано в процедуре OnTimer? или ждет время, потом выполняет то что написано в процедуре, а потом передает управления обратно в то место откуда его вызвали?
Ответить с цитированием
  #26  
Старый 09.07.2011, 20:39
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Почитай FAQ по таймеру.

И еще раз, запусти код
PHP код:
procedure TForm1.Timer1Timer(SenderTObject);
begin
 
if checkbox5.Checked then
  begin
    showmessage
('Мего авторизация 130 акков)');
  
end;
end
и увидишь.
Интервал поставь скажем в 10000;

Можно,кстати, добавить еще счетчик.

Последний раз редактировалось Konrad, 09.07.2011 в 20:42.
Ответить с цитированием
  #27  
Старый 09.07.2011, 20:46
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Ждало максимум две секунды и то что написано в OnTimer не включалось.

Последний раз редактировалось m1sclick, 18.07.2011 в 18:42.
Ответить с цитированием
  #28  
Старый 09.07.2011, 20:52
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Еще раз.
Создай новый проджект.
Закинь туда таймер и чекбокс.
в онтаймер пропиши код.
Поставь интервал 10000.

И все.
Ответить с цитированием
  #29  
Старый 09.07.2011, 21:05
m1sclick m1sclick вне форума
Начинающий
 
Регистрация: 04.07.2011
Адрес: Украина
Сообщения: 186
Версия Delphi: 2010
Репутация: 2094
По умолчанию

Получается так..

Когда я включаю таймер начинается отсчет времени при этом цикл продолжает выполняться. После истечения времени происходит действие в обработчике OnTimer и через указанное ранее время оно повторяется.
Ответить с цитированием
  #30  
Старый 09.07.2011, 21:10
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Тяжелый случай.
У тебя icq есть?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter