Показать сообщение отдельно
Старый 01.09.2009, 11:24   #15
Tronix
Знающий
 
Регистрация: 26.07.2009
Адрес: Россия, Москва
Сообщений: 318
Написано 103 полезных сообщений
(для 331 пользователей)
Ответ: Разработка Terminal-клиента для управления RS232 устройствами

Не могу разобраться в чем проблемма. Все нормально отсылает в комп, но при приеме упорно накапливает в строке-буффере только первый символ. Код:
program NewProject;
uses commthread;
var
    
i,
  
idinteger;
  
tstring;

procedure threadaction;    // Тред. Собираем все что пришло с порта в строку t
begin
    t 
:= chr(comm_read);
end;

procedure WaitKey;    // Ждем нажатия на звездочку
begin
    
while GetKeyClicked <> KE_STAR do 
    
begin 
      Delay
(100); 
    
end
end;  
begin
    drawText
(GetProperty('microedition.commports'),0,0);    // Выводим доступные порты
    
repaint;
    
drawText(comm_open('comm:COM0;baudrate=115200'),0,10); //Открываем COM0
    
drawText('Opened.',0,20);
    
repaint;
    
WaitKey;
  
drawText(comm_write_string('Test Line 123456789'),0,70); //Посылаем в комп тестовую строку
    
drawText('Send string OK.',0,30);
    
repaint;
    
WaitKey;

      
init;        // Запускаем тред с comm_read
    
start;
    

repeat  // Постоянно выводим что у нас образовалось в строке-буффере
setcolor(0,0,0);
fillrect(0,0,100,20);
setcolor(0,255,0);
    
DrawText(t0,0);
    
repaint;
until getkeyclicked KE_STAR// выходим по звездочке
    
stop// все закрываем.
  
comm_close;
    
drawText('Closed.',0,50);
  
WaitKey;
end
Причем если отключить использование треда и заменить цикл repeat-until на что-то вроде
while t<>'0' do begin
      i
:= comm_read;
        
drawText(integertostring(i),id,40);
        
repaint;
        
id:= id+10;
    
end
То все работает. Но comm_read ждет пока что-либо не получит из порта, тоесть если ничего не приходит - получаеться пауза в цикле (программе). А в терминалке мне этого не надо совершенно. Где косяк?
Хелп плиз! Проект из-за этого застопорился ((

P.S. Есть конечно мысли сделать как-нибуть свою псевдо-мультитредность нахимичив чего-нибуть с таймером, но пока мысль эта до конца не оформилась (
(Offline)
 
Ответить с цитированием