Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задержка потока 
V
    Опции темы
Poseidon
Дата 19.1.2006, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Елы-палы. Ну и развели димагогию. Поток останавливается методом Suspend. Обратно возобновляется методом Resume. Пример нужен?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
NoliX
Дата 19.1.2006, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 5.7.2005

Репутация: нет
Всего: 1



Poseidon не пойдет мне suspend!
нужно остановить поток не из приложения, а приостановить его из самого себя в цикле, в нужном месте!
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки
PM MAIL   Вверх
Alexeis
Дата 19.1.2006, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Цитата

приостановить его из самого себя в цикле, в нужном месте!

а откуда он будет возобновлятся??


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Poseidon
Дата 19.1.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(NoliX @ 19.1.2006, 12:21 Найти цитируемый пост)

приостановить его из самого себя в цикле, в нужном месте
Тогда sleep, что тут думать. Если это не основной поток программы, то зависания не будет, но поток "уснет" на указанное время.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
AntonSaburov
Дата 19.1.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



А объекты синхронизации Винды чем не нравятся ?

Вот тут можно посмотреть - http://msdn.microsoft.com/library/default....ent_objects.asp
PM MAIL WWW ICQ   Вверх
NoliX
Дата 19.1.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 5.7.2005

Репутация: нет
Всего: 1



alexeis1, он будет приостановлен на несколько секунд, в общем мне нужен аналог sleep который при синхронизации не будет тормозить основную программу, либо каким-то образом
передавать

Код

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

--------------------
Опыт - это учитель, который очень дорого берет за свои уроки
PM MAIL   Вверх
Poseidon
Дата 19.1.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(NoliX @ 19.1.2006, 12:48 Найти цитируемый пост)

либо каким-то образом
передавать
"Какой-то образ" - это SendMesage (или PostMessage)



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
_hunter
Дата 19.1.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



и опять мы возвращаемся к началу...
Sleep() торможит только текущий поток ( остальные не тормозятся )
поэтому если наблюдается торможение -- где0то в логике ошибка.
а что не понятно с сообщениями?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Alexeis
Дата 19.1.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Poseidon прав
регистрируется сообщение
У формы делается обработчик
В нужный момент поток отправляет сообщение первой
форме.
обработчик запускает вторую форму - только так


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
NoliX
Дата 19.1.2006, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 5.7.2005

Репутация: нет
Всего: 1



Poseidon, кажется то что надо, а как с помощью этого выполнить допустим

Код

form5.label4.Caption:=IntToStr(z);    

Form4.Memo1.Lines.Add(DateTimeToStr(Now) + ': Все сообщения отправлены');    

Form4.Hide;

тоесть какими параметрами вызывать, или где их подглядеть?

Это сообщение отредактировал(а) NoliX - 19.1.2006, 14:00
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки
PM MAIL   Вверх
Poseidon
Дата 19.1.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(NoliX @ 19.1.2006, 12:56 Найти цитируемый пост)

тоесть какими параметрами вызывать, или где их подглядеть?
Какие параметры ты имеешь ввиду?

В обще виде где-то так
Код
SendMessage (MainForm.Handle, WM_User+101, 0, 0);


В главной форме пишешь обработчик сообщения WM_User+101, а в нем то, что нужно сделать при получении этого сообщения.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
NoliX
Дата 19.1.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 5.7.2005

Репутация: нет
Всего: 1



так, кажется начинаю понимать, осталось ознать, как написать обработчик сообщения =(
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки
PM MAIL   Вверх
Alexeis
Дата 19.1.2006, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



вот пример drkb
Код

Один из способов - создать пользовательское сообщение и использовать метод preform чтобы разослать его всем формам из массива Screen.Forms. 

{Code for Unit1} 

const 
  UM_MyGlobalMessage = WM_USER + 1; 

type 
  TForm1 = class(TForm) 
    Label1: TLabel; 
    Button1: TButton; 
    procedure FormShow(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
  private 
  {Private declarations} 
    procedure UMMyGlobalMessage(var AMessage: TMessage); message 
      UM_MyGlobalMessage; 
  public 
  {Public declarations} 
  end; 

var 
  Form1: TForm1; 

implementation 

{$R *.DFM} 

uses Unit2; 

procedure TForm1.FormShow(Sender: TObject); 
begin 
  Form2.Show; 
end; 

procedure TForm1.UMMyGlobalMessage(var AMessage: TMessage); 
begin 
  Label1.Left := AMessage.WParam; 
  Label1.Top := AMessage.LParam; 
  Form1.Caption := 'Got It!'; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
  f: integer; 
begin 
  for f := 0 to Screen.FormCount - 1 do 
    Screen.Forms[f].Perform(UM_MyGlobalMessage, 42, 42); 
end; 

{Code for Unit2} 

const 
  UM_MyGlobalMessage = WM_USER + 1; 
type 
  TForm2 = class(TForm) 
    Label1: TLabel; 
  private 
  {Private declarations} 
    procedure UMMyGlobalMessage(var AMessage: TMessage); 
      message UM_MyGlobalMessage; 
  public 
  {Public declarations} 
  end; 

var 
  Form2: TForm2; 

implementation 

{$R *.DFM} 

procedure TForm2.UMMyGlobalMessage(var AMessage: TMessage); 
begin 
  Label1.Left := AMessage.WParam; 
  Label1.Top := AMessage.LParam; 
  Form2.Caption := 'Got It!'; 
end; 




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
NoliX
Дата 19.1.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 103
Регистрация: 5.7.2005

Репутация: нет
Всего: 1



alexeis1, спасибо большое, сейчас попытаюсь разобраться, скорее всего это то, что нужно...
--------------------
Опыт - это учитель, который очень дорого берет за свои уроки
PM MAIL   Вверх
Poseidon
Дата 19.1.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 10
Всего: 133



Цитата(NoliX @ 19.1.2006, 13:11 Найти цитируемый пост)

так, кажется начинаю понимать, осталось ознать, как написать обработчик сообщения =(


Да на самом деле все очень просто. Вот как обработать наше WM_User+101

Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TMainForm = class(TForm)
  private
    //сюда добавляем обьявление
    procedure WMUser101(var Msg: TMessage); message WM_User+101;
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

{ TForm1 }

procedure TMainForm.WMUser101(var Msg: TMessage);
begin
// тут пишем что будем делать при получении WM_User+101
end;

end.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.