Larry Laffer
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Пример использования потока: Цитата: unit Unit5; interface uses Classes, Windows, winsvc; type SecondTheard = class(TThread) private // В эту секцию ты можешь добавлять свои процедуры, которые хочешь использовать в потоке. У меня добавлена процедура sstatus; procedure sstatus; protected procedure Execute; override; //Это процедура, которая выполняется при запуске потока; end; implementation Uses Unit1; procedure SecondTheard.Execute; var hEvent:Thandle; begin hEvent:= CreateEvent(nil, true, false, 'getservice'); while not terminated do begin WaitForSingleObject(hEvent, 5000); synchronize(sstatus); end; end; procedure SecondTheard.sstatus; begin if SERVICE_RUNNING = MainForm.ServiceGetStatus(nil, 'df')=false then MainForm.Indicate(true) else MainForm.Indicate(false); end; end. | Это Unit самого потока. В главном юните нужно добавить: Цитата: ... implementation uses Unit5 // Добавил сюда Unit моего потока. В данном случае Unit5; ... procedure TMainForm.FormCreate(Sender: TObject); var ... st: SecondTheard; begin ... st:=SecondTheard.create(false); // Создаем поток. В скобках указано, что поток сразу начинает выполнения. В противном случае нужно поставить true, а для последующего запуска потока использовать метод Resume; st.Priority:=tpLowest; // Задаем приоритет. Может принимать значения: tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical; st.freeonterminate:=true; // Если значение true, то после выполнения процедуры Execute поток самоуничтожится; end; | Чтобы изменить значение переменной в потоке, добавь переменную потока в раздел public, после чего ты сможешь изменить её из любого юнита твоей программы, к которому подключен юнит потока.
---------- Save The Planet -- Kill YourSelf! http://larry.nxt.ru |
|