Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Процессы в Bcb6.

12K
12 ноября 2005 года
Algorithm
6 / / 12.11.2005
Положим в программе при нажатии кнопки "Start" запускается процесс. Я хочу, чтобы после нажатия кнопки "Pause" этот процесс приостановился. Но после запуска я не могу нажимать никаких кнопок до окончания процесса. Кто-нибудь подскажите, как нужно описать процесс, чтобы реализовать описанную выше ситуацию.
1
12 ноября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Algorithm
Положим в программе при нажатии кнопки "Start" запускается процесс. Я хочу, чтобы после нажатия кнопки "Pause" этот процесс приостановился. Но после запуска я не могу нажимать никаких кнопок до окончания процесса. Кто-нибудь подскажите, как нужно описать процесс, чтобы реализовать описанную выше ситуацию.


Насколько это возможно понять из поста - интересуют вопросы создания потоков? Т.е. есть какая либо длительная операция - и хотелось бы что бы она не блокировала программу? Вобщем если я правильно понял - то в таком случае в проект ВСВ необходимо добавить объект TThread (New\Other\Thread Object).
Ну а дальше в методе Execute пишешь код своей операции и по нажатию на кнопках запускаещь, приостанавливаешь или останавливаешь свой поток. Соответственно поиск в справке по TThread, МСДН,Inet - CreateThread

12K
12 ноября 2005 года
Algorithm
6 / / 12.11.2005
Я создал thread object, но когда он запускается кнопки не отвечают.
4.8K
13 ноября 2005 года
Jump
128 / / 09.11.2005
Цитата:
Originally posted by Algorithm
Я создал thread object, но когда он запускается кнопки не отвечают.


А как ты его запускаешь?

В простейшем случае длительные операции я выполнял так:

Код:
void __fastcall TFormX::ButtonXClick(TObject *Sender)
{
    TSaveImageThread *SaveFrmThr;


    try
    {
        SaveFrmThr = new TSaveImageThread(true);
        SaveFrmThr->Priority = tpLowest;
        SaveFrmThr->FreeOnTerminate = true;
        if(SaveFrmThr)SaveFrmThr->Resume();
    }
    catch(...)
    {
        if(SaveFrmThr)SaveFrmThr->Terminate();
    };
};


Но здесь трэд после запуска "теряется", т.е. он запускается, выполняется и самоудаляется по окончании, и я за ним не слежу и им не управляю.
На сколько я понял он у тебя даже не запускается как поток - если сделаешь так как я написал, то запустится.
(Я предполагаю, что пытаясь запустить поток ты выполняешь Thr->Execute(... - а, так как это всего лишь функция, которую должен выполнить поток после запуска, то этим ты просто выполняешь ее (не создавая ни какого потока))
1
13 ноября 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by Jump

(Я предполагаю, что пытаясь запустить поток ты выполняешь Thr->Execute(... - а, так как это всего лишь функция, которую должен выполнить поток после запуска, то этим ты просто выполняешь ее (не создавая ни какого потока))


Не проще ли сказать что поток нужно запускать используя или конструктор или метод Resume()? :)
Algorithm
Установи приоритет потока низким - как показал тебе Jump
Если поток обращается к форме, канве формы или к другим VCL-компонентам, необходимо выполнять синхронизацию потоков.

12K
13 ноября 2005 года
Algorithm
6 / / 12.11.2005
OK. Ошибка была в том, что в Execute процесса я выполнял Synchronize, сейчас всё работает.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог