Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.19;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.083 c
4-61867
9999
2002-11-06 15:18
2002.12.19
Имена компов в сети!!!


3-61462
Sokol
2002-12-01 01:43
2002.12.19
Как программно изменить пароль в MSAccess?


1-61657
Dmitry_K
2002-12-07 19:52
2002.12.19
Как изменить атрибут файла


3-61507
LeReve
2002-12-02 19:21
2002.12.19
сорри может за глупый вопрос, но все сталкиваются впервые!


7-61840
xCom
2002-10-04 16:08
2002.12.19
Язык и стандарты в Windows (настройка)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский