в общем нужно сделать следующее: есть главное приложение которое вызывает функцию из библиотеки их 2-е (start и stop).
procedure ButtonClick1;
begin
  if Start then ShowMessage('ok')
  else ShowMessage('not ok or stop');
end;
procedure ButtonClick1;
begin
  Stop;
end;
....
Функция ждет реакции железа т.е. делат в нити какую то работу. В этот момент у пользователя в главном приложении не должен тормозится главный поток. 
вот примерный код в либе. 
TWorkThread = class
public 
  procedure Execute; override;
end;
procedure TWorkThread.Execute;
begin
  while True do if fAnswer_Hardware ot fStop then Break;
end;
function Start : boolean;
var W : TWorkThread;
begin
  W := TWorkThread.Create(false);
  WaitForThreadTerminate(W.Handle,0);
  Result := W.Result ... 
end;
 
procedure Stop; 
begin
  fStop := true;
end;
чуствую что где то грабли, такие большие, с топором на ручке ...
			
		





