Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.05.2010, 11:41
Kalrh Kalrh вне форума
Прохожий
 
Регистрация: 22.05.2010
Сообщения: 2
Репутация: 10
По умолчанию Вопрос о потоке

Проблема при CreateThread

В задаче у меня в потоке считывается файл по 16 байт и в StringGrid выводится инфо в двоичном коде.
Если файл не большого размера то все в порядке, а если нет то программа вываливается, поток при этом не успевает дойти до завершения.
в чем может быть проблема?
помогите плз
Ответить с цитированием
  #2  
Старый 22.05.2010, 12:57
Аватар для urahara
urahara urahara вне форума
Новичок
 
Регистрация: 16.01.2010
Сообщения: 86
Репутация: 35
По умолчанию

телепаты в отпуске
__________________
Arrrgh
Ответить с цитированием
  #3  
Старый 22.05.2010, 17:40
Kalrh Kalrh вне форума
Прохожий
 
Регистрация: 22.05.2010
Сообщения: 2
Репутация: 10
По умолчанию

Код:
procedure TForm1.Button2Click(Sender: TObject);
Var
ThId    : DWORD;  
begin
BeginThread(Nil,0,@OpenFile,nil,0,ThId);
end;

procedure OpenFile;
Var
    hFile       :Cardinal;
    dwReaded    : DWORD;
    Buff        : array [1..16] of Byte;
    c           : Char;
    i,j,n,rez   : Integer;
    CharStr,Tmp : String;
begin
hFile:= CreateFile(PChar(Form1.ListView1.Selected.SubItems.Strings[3]),
                   GENERIC_READ,
                   FILE_SHARE_READ,
                   0,
                   OPEN_EXISTING,
                   FILE_ATTRIBUTE_NORMAL,
                   0);


n:=16;    
j:=0;     

Form1.StringGrid1.RowCount:=1;
Form1.StringGrid1.ColCount:=round(n/2)+2;

Form1.StringGrid1.ColWidths[0]:=70;
For i:=1 to Form1.StringGrid1.ColCount-2  do
Form1.StringGrid1.ColWidths[i]:=40;
Form1.StringGrid1.ColWidths[Form1.StringGrid1.ColCount-1]:=150;

Repeat

 Form1.StringGrid1.Rows[j].Clear;    
 For i:=1 to n do  Buff[i]:=0;       

 ReadFile(hFile,Buff,n,dwReaded,nil);
 tmp:='';                           
 CharStr:='';                         

 if  dwReaded=n then                 
     for i:=1 to n do
      Begin
      
      If Buff[i]<=127 then
         
         If  ((Buff[i]>=0) and (Buff[i]<=31) or(Buff[i]=127))  then c:='.'
         Else c:=Char(Buff[i])
      Else c:=Char(Buff[i]);
      CharStr:=CharStr+c;      

      Tmp:=Tmp+IntToHex(Buff[i],2);

      if i mod 2 =0 then
         Begin
         rez:=Round(i/2);
         Form1.StringGrid1.Cells[rez,j]:=Tmp;
         Tmp:='';
         End;
      End
 Else   
      for i:=1 to dwReaded do
      Begin
      If Buff[i]<=127 then
         If  ((Buff[i]>=0) and (Buff[i]<=31)or(Buff[i]=127)) then c:='.'
         Else c:= Char(Buff[i])
      Else c:= Char(Buff[i]);
      If  (i > dwReaded) then Tmp:= Tmp + '  '
      else Tmp:= Tmp + IntToHex(Buff[i],2);
      CharStr:= CharStr + c;
      if i mod 2 =0 then
         Begin
         rez:= Round(i/2);
         Form1.StringGrid1.Cells[rez,j]:= Tmp;
         Tmp:='';
         End;
      End;

If Form1.RadioGroup1.ItemIndex = 1 then
   Form1.StringGrid1.Cells[0,j]:=IntToHex(j*n,8)
Else
   Begin
   tmp:=IntToHex(j*n,8);
   Form1.StringGrid1.Cells[0,j]:=IntToStr(StrToInt( '$' +tmp));
   End;

Form1.StringGrid1.Cells[Form1.StringGrid1.ColCount-1,j]:=CharStr;
Inc(j);
If dwReaded=n then
Form1.StringGrid1.RowCount:=Form1.StringGrid1.RowCount+1;
Until (dwReaded<n);
CloseHandle(hFile);
end;
Admin: Пользуемся тегами!

Последний раз редактировалось Admin, 23.05.2010 в 17:54.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:09.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter