Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.19;
Скачать: CL | DM;

Вниз

Thread   Найти похожие ветки 

 
skiph ©   (2002-12-05 10:45) [0]

Работает поток, в ходе может его выполнения потребоваться приостановить работу на время и передать управление другой форме. После выполнения определенных действий, форма закрывается и поток снова должен возобновить свою деятельность. Проблема в том, что форма хоть и отображается, но неактивна. Пробовал передавать ей управление через Synchronize(Form2.ShowWindow), где

procedure TNewRecord.ShowWindow;
begin
NewRecord.ShowModal;
end;
Не помогает.


 
Внук ©   (2002-12-05 11:28) [1]

Поток передает управление форме...
Давайте почетче с терминами :)


 
Alx2 ©   (2002-12-05 11:31) [2]

>skiph © (05.12.02 10:45)
Модально покажи форму из свово потока


 
Ihor Osov'yak ©   (2002-12-05 11:41) [3]

2 Alx2 © (05.12.02 11:31)

Иногда лучше жевать... Сорри, не удержался ...

2 skiph © (05.12.02 10:45) - Обратите внимание на Внук © (05.12.02 11:28), а так в общем - используйте посылку сообщений в основной поток а также обьекты синхронизации ...

Зы - надеюсь,что в своем потоке Вы напрямую не работаете с обьектами VCL..




 
Alx2 ©   (2002-12-05 12:43) [4]

>Ihor Osov"yak © (05.12.02 11:41)
>Иногда лучше жевать... Сорри, не удержался ...

Да ничего... потом, глядишь, получится.

По теме:
"в ходе может его выполнения потребоваться приостановить работу на время и передать управление другой форме. После выполнения определенных действий, форма закрывается и поток снова должен возобновить свою деятельность"

Отбросим, конечно, терминологическую несуразицу автора.
Если рассмотреть основной поток+модальная форма. Зачем городить огород, если однопоточная модель так и работает?


 
NailS ©   (2002-12-05 13:15) [5]

SendMessage ?


 
skiph ©   (2002-12-06 06:09) [6]

to Alx2
Извиняюсь - очепятка.
А суть задумки такая: перебрасываются данные из одной БД в другую, причем для некоторых строковых полей в старой базе, в новой заводятся справочники. Прочитав значение такого поля, я ищу в справочнике уже имеющуюся соответствующую запись. Если таковая не найдена, я должен спросить у пользователя: добавить это значение в справочник или заменить на другое значение (в случае если запись сделана с ошибкой). Для этого и открываеся форма.
При это работа потока не останавливается, а лишь приостанавливается на время и после того, как пользователь сделает выбор, продолжает работу с той точки, на которой


 
Alx2 ©   (2002-12-06 08:10) [7]

>skiph © (06.12.02 06:09)

В данном примере Synchronize не нужно.

procedure TMyThread.DoMessage;
begin
case MessageBox(0, "Нажмите на кнопку", "Ответьте на вопрос:", MB_YESNO or MB_DEFBUTTON1 or MB_ICONQUESTION) of
IDYES : ShowMessage("Нажато YES");
IDNO : ShowMessage("Нажато NO");
end;
end;

procedure TMyThread.Execute;
begin
DoMessage;
end;


А в этом примере Synchronize нужно. Так как используются глобальные незащищенные объекты Screen и т.д.

procedure TMyThread.DoMessage;
begin
with TForm.create(Nil) do
begin
ShowModal;
free;
end;
end;

procedure TMyThread.Execute;
begin
Synchronize(DoMessage);
end;


Таким образом, рисуешь свой диалог с нужной дополнительной инфой, модально и синхронизированно кажешь его из своего потока и в зависимости от выбора пользователья продолжаешь работу.


 
Alx2 ©   (2002-12-06 08:15) [8]

>Alx2 © (06.12.02 08:10)
Вдогонку. По инерции в первом примере воткнул ShowMessage. Он тоже требует Synchronize.


 
Ihor Osov'yak ©   (2002-12-10 10:50) [9]

2 Alx2 © (06.12.02 08:10)


 
Ihor Osov'yak ©   (2002-12-10 11:00) [10]

2 Alx2 © (06.12.02 08:10)
> синхронизированно кажешь его из своего потока и в зависимости
> от выбора пользователья продолжаешь работу.



При вызове через синхронайз "подсинхронайзнутая" функция выполняется в контексте главного потока. Это можете расценить как комментарий к вашему "из своего потока" ...

2 skiph © (06.12.02 06:09)

Такая схема должно работать. Если форма с вопросом создавалась восновном потоке, а ее активация идет через синхронайз и в тоже времмя цікл віборки основного потока не приторможен. То есть, если у вас проблемы - то форму с вопросом вы создавали в рабочем потоке (очень оригинально), либо у Вас приторможен цыкл выборки главного потока (к ппримеру, вы ожидаете завершения рабочего потока через какой-то обьект синхронизации).

Зы - а вопрос можно задать и через апишный, к примеру см.
Alx2 © (06.12.02 08:10) (в этой части он прав)

MessageBox(0, "Нажмите на кнопку", "Ответьте на вопрос:", MB_YESNO or MB_DEFBUTTON1 or MB_ICONQUESTION) - єта вещь вполне потокобезопасна, можно візівать с любого потока и не заботится о синхронизации и проблемами с блокировками ...


 
Alx2 ©   (2002-12-10 12:24) [11]

>Ihor Osov"yak © (10.12.02 11:00)
>При вызове через синхронайз "подсинхронайзнутая" функция
>выполняется в контексте главного потока. Это можете расценить
>как комментарий к вашему "из своего потока" ...

Угу. Конечно. Но имхо это уже буквоедство. Так можно докатиться до фраз "переходишь в режим ядра и создаешь новый объект синхронизации"



Страницы: 1 вся ветка

Текущий архив: 2002.12.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
3-61464
b_baranov
2002-12-02 04:06
2002.12.19
Как перехватить отправку в базу записи, содержащей Null-значения


3-61431
alxx
2002-11-29 17:19
2002.12.19
Относительно триггеров.


4-61878
Damage
2002-11-07 00:08
2002.12.19
Есть ли StgOpenStorageEx в реализации WinAPI Delphi?


8-61711
YuN
2002-09-04 15:53
2002.12.19
Как проще всего проиграть звуковой файл?


1-61564
Lizerginnn
2002-12-09 18:14
2002.12.19
ChartoOEM?