Процессы в Bcb6.
Положим в программе при нажатии кнопки "Start" запускается процесс. Я хочу, чтобы после нажатия кнопки "Pause" этот процесс приостановился. Но после запуска я не могу нажимать никаких кнопок до окончания процесса. Кто-нибудь подскажите, как нужно описать процесс, чтобы реализовать описанную выше ситуацию.
Насколько это возможно понять из поста - интересуют вопросы создания потоков? Т.е. есть какая либо длительная операция - и хотелось бы что бы она не блокировала программу? Вобщем если я правильно понял - то в таком случае в проект ВСВ необходимо добавить объект TThread (New\Other\Thread Object).
Ну а дальше в методе Execute пишешь код своей операции и по нажатию на кнопках запускаещь, приостанавливаешь или останавливаешь свой поток. Соответственно поиск в справке по TThread, МСДН,Inet - CreateThread
Я создал thread object, но когда он запускается кнопки не отвечают.
А как ты его запускаешь?
В простейшем случае длительные операции я выполнял так:
{
TSaveImageThread *SaveFrmThr;
try
{
SaveFrmThr = new TSaveImageThread(true);
SaveFrmThr->Priority = tpLowest;
SaveFrmThr->FreeOnTerminate = true;
if(SaveFrmThr)SaveFrmThr->Resume();
}
catch(...)
{
if(SaveFrmThr)SaveFrmThr->Terminate();
};
};
Но здесь трэд после запуска "теряется", т.е. он запускается, выполняется и самоудаляется по окончании, и я за ним не слежу и им не управляю.
На сколько я понял он у тебя даже не запускается как поток - если сделаешь так как я написал, то запустится.
(Я предполагаю, что пытаясь запустить поток ты выполняешь Thr->Execute(... - а, так как это всего лишь функция, которую должен выполнить поток после запуска, то этим ты просто выполняешь ее (не создавая ни какого потока))
(Я предполагаю, что пытаясь запустить поток ты выполняешь Thr->Execute(... - а, так как это всего лишь функция, которую должен выполнить поток после запуска, то этим ты просто выполняешь ее (не создавая ни какого потока))
Не проще ли сказать что поток нужно запускать используя или конструктор или метод Resume()? :)
Algorithm
Установи приоритет потока низким - как показал тебе Jump
Если поток обращается к форме, канве формы или к другим VCL-компонентам, необходимо выполнять синхронизацию потоков.