Текущий архив: 2005.07.11;
Скачать: CL | DM;
ВнизФункция в потоке работает неверно. Помогите разобратся. Найти похожие ветки
← →
Kolan © (2005-06-13 01:07) [0]Здравствуйте,
Продолжаю делать проект, разговор в котором шел в
http://delphimaster.net/view/1-1118492660/
Сделал просто модули и всё, некаких 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 <= 9) then {2}
// DONE: RelayNumber < ?.
begin
WriteByte($f1);{1}
...
В начале измерений параметр RelayNumber передаётся равным 0.
И что я вижу, дойдя до строки {1} дальше ничего не идет, а возвращается на {2}. Причем уже равен 1...
Я думаю что это из за того что для записи в порт используется компонент лежащий на главной форме. Я просто как бы обернул его:
function WriteByte(B: Byte): Boolean;
begin
MainForm.Comm.WriteByte(B);
Result := True;
end;
Подскажите в чём конкретно ощибка? И как испровить.
PS Без потока всё нормально работает...
← →
Alexander Panov © (2005-06-13 02:04) [1]Kolan © (13.06.05 1:07)
Я думаю что это из за того что для записи в порт используется компонент лежащий на главной форме
Этот объект используется только в этом потоке? Данные измегяются только в этом потоке?
Если, объект используется в разных потоках, то обязательно используй синхронизацию.
(Мне почему-то кажется, что основной поток у тебя тоже интенсивно использует MainForm.Comm).
Кроме того, используй try..except..end для обработки и гашения exception.
Страницы: 1 вся ветка
Текущий архив: 2005.07.11;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.043 c