![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Функция в потоке работает неверно. Помогите разобратся.
Kolan © (2005-06-13 01:07:00)Здравствуйте,
Продолжаю делать проект, разговор в котором шел в
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1118492660&n=0
Сделал просто модули и всё, некаких dll. (Потом добью).
Проблема вот в чём:
Есть необходимость проводить измерения в отдельном потоке.
Для этого написал класс поток.
TMeasurmentThread = class(TThread)
private
protected
public
FMeasurmentDataRec: PMeasurmentData;
constructor Create(CreateSuspended: Boolean;
MeasurmentDataRec: PMeasurmentData);
procedure Execute; override;
procedure MakeMeasurment;
end;
...
procedure TMeasurmentThread.Execute;
begin
inherited;
FreeOnTerminate := True;
MakeMeasurment;
end;
...
procedure TMeasurmentThread.MakeMeasurment;
var
...
begin
...
SwitchRelay(DeviceDataRec.CurrentRNumber);
...
end;
Процедура SwitchRelay находится в другом модуле, который через ещё один записывает данные в порт.
Вот её кусок:
function SwitchRelay(RelayNumber: Byte): Boolean;
var
...
begin
if (RelayNumber
Alexander Panov (2005-06-13 02:04:00) [1]Kolan © (13.06.05 1:07)
Я думаю что это из за того что для записи в порт используется компонент лежащий на главной форме
Этот объект используется только в этом потоке? Данные измегяются только в этом потоке?
Если, объект используется в разных потоках, то обязательно используй синхронизацию.
(Мне почему-то кажется, что основной поток у тебя тоже интенсивно использует MainForm.Comm).
Кроме того, используй try..except..end для обработки и гашения exception.