HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #4651  
Старый 18.10.2009, 10:49
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

тут дело не в потоках, а в скорости считывания с винта + правильности алгоритма считывания строк.
Простой пример из С++
функций
Код:
ULONG CountLinesInFile(char* name)
{
	FILE* file;
	ULONG ret = 0;
	char buf[64];
	
	file = fopen(name, "rt");
	if (file)
	{
		while (!feof(file))
		{
			if (fgets(buf, 64, file)) 
			{
				ret++;
			}
		}
		
		fclose(file);
	}
	
	return ret;
}
пересчитываем спамбазу на 1,7 лямов мыл примерно за 2-3 секунды.
Если адаптировать для поиска #10 символов в свободно считанных данных, то можно и быстрее ускорить.
Читать в потоках не советую потому что из-за синхронизации(которую придется тебе делать) ты потеряешь в скорости.
По этому самый лучшый выход такой:
Код:
var
 buf:array[0..1024*64-1];  //типа 64 кила буфер
 len:dword; // кол-во считанных данных
 h:dword;
 cnt : dword;
 x :dword;
begin
h := CreateFile(....);
if h <> $FFFFFFFF then
  begin
    cnt := 0;
    while true do
    begin
      if ReadFile(h,...., len) then
      begin
        for x := 0 to len-1 do if buf[x] = #10 then inc(cnt);
      end else break;
      if len < 1 then break;
    end;
   
    CloseHandle(h)
  end;
end;
после этого cnt будет = кол-ву строк

Последний раз редактировалось slesh; 18.10.2009 в 10:56..
 
Ответить с цитированием

  #4652  
Старый 18.10.2009, 12:49
mobilka
Познающий
Регистрация: 13.10.2009
Сообщений: 63
Провел на форуме:
373897

Репутация: 13
По умолчанию

помогите найти ошибку в долбаном коде-
Цитата:
procedure TForm1.Button2Click(Sender: TObject);
var
FStream : TFileStream;
ProgressBar :TProgressBar;
i,j,count: integer;
buf : array[1..40000] of Char;
begin with OpenDialog1 do if Execute then
begin
i:=round(FStream.Size/40000);
if (i*40000<FStream.Size) then i:=i+1;
ProgressBar.Max:=i;
Application.ProcessMessages;
for j:=1 to i do
begin
if i=j then
count:=FStream.Read(buf,FStream.Size-((i-1)*40000))
else count:=FStream.Read(buf,length(buf));
ProgressBar.Position:=j;
while get_accept=false do Application.ProcessMessages;
get_accept:=false;


Listbox1.Items.Add(opendialog1.FileName);
FStream:=TFileStream.Create(OPenDialog1.FileName,f mOpenRead);
Edit2.Text:=IntToStr(Round(FStream.Size/1024))+' êèëîáàéò.';
FStream.free;
end;
end;

end;




procedure TForm1.Button3Click(Sender: TObject);
begin
Listbox1.Clear;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SendMessage(ListBox1.Handle,LB_SETHORIZONTALEXTENT ,width,0);
end;
end.
 
Ответить с цитированием

  #4653  
Старый 18.10.2009, 13:00
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме:
1747641

Репутация: 175
Отправить сообщение для Chrome~ с помощью ICQ
По умолчанию

Цитата:
Сообщение от mobilka  
помогите найти ошибку в долбаном коде-
Есть ошибка в этой процедуре:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
FStream : TFileStream;
ProgressBar :TProgressBar;
i,j,count: integer;
buf : array[1..40000] of Char;
begin with OpenDialog1 do if Execute then
begin
i:=round(FStream.Size/40000);
if (i*40000<FStream.Size) then i:=i+1;
ProgressBar.Max:=i;
Application.ProcessMessages;
for j:=1 to i do
begin
if i=j then
count:=FStream.Read(buf,FStream.Size-((i-1)*40000))
else count:=FStream.Read(buf,length(buf));
ProgressBar.Position:=j;
while get_accept=false do Application.ProcessMessages;
get_accept:=false;


Listbox1.Items.Add(opendialog1.FileName);
FStream:=TFileStream.Create(OPenDialog1.FileName,f mOpenRead);
Edit2.Text:=IntToStr(Round(FStream.Size/1024))+' êèëîáàéò.';
FStream.free;
end;
end;

end;
Здесь у тебя в разделе var указан ProgressBar, который в коде должен создаваться. Метод Create. Может быть ты ошибся? ProgressBar, наверное, должен лежать у тебя на форме, а из var его нужно удалить.
 
Ответить с цитированием

  #4654  
Старый 18.10.2009, 13:09
mobilka
Познающий
Регистрация: 13.10.2009
Сообщений: 63
Провел на форуме:
373897

Репутация: 13
По умолчанию

убрал-
Цитата:
procedure TForm1.Button1Click(Sender: TObject);
var

FStream: TFileStream;
i,j,count: integer;
buf : array[1..40000] of Char;
ws : TWSAData;
s : string;
begin
WSAStartup($101, ws);
s := SendFile(Edit1.Text, '/get.php', opendialog1.FileName);

i:=round(FStream.Size/40000);
if (i*40000<FStream.Size) then i:=i+1;
ProgressBar.Max:=i;
Application.ProcessMessages;
for j:=1 to i do
begin
if i=j then
count:=FStream.Read(buf,FStream.Size-((i-1)*40000))
else count:=FStream.Read(buf,length(buf));
ProgressBar.Position:=j;
while get_accept=false do Application.ProcessMessages;
get_accept:=false;


end;
end;
теперь при компиляции ругается на-
Цитата:
ProgressBar.Max:=i;
 
Ответить с цитированием

  #4655  
Старый 18.10.2009, 13:14
mobilka
Познающий
Регистрация: 13.10.2009
Сообщений: 63
Провел на форуме:
373897

Репутация: 13
По умолчанию

исправил. теперь компилируется но при нажатии button1 выскакивает ошибка и подчеркивается строка -
Цитата:
i:=round(FStream.Size/40000);
 
Ответить с цитированием

  #4656  
Старый 18.10.2009, 13:32
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме:
1747641

Репутация: 175
Отправить сообщение для Chrome~ с помощью ICQ
По умолчанию

Текст ошибки напиши.
 
Ответить с цитированием

  #4657  
Старый 18.10.2009, 13:34
Chrome~
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме:
1747641

Репутация: 175
Отправить сообщение для Chrome~ с помощью ICQ
По умолчанию

FStream также как и ProgressBar создавать нужно! Где ты его создаешь?
 
Ответить с цитированием

  #4658  
Старый 18.10.2009, 22:18
wolmer
Постоянный
Регистрация: 12.05.2009
Сообщений: 395
Провел на форуме:
4761503

Репутация: 229
По умолчанию

Цитата:
ЧТобы избежать этого парси HTTP заголовок ответа сервера и там будет поле Content-Lenght и там указано число байт которые вернул сервак. ВОт ты и считывай это кол-во. как тока считал, то сам закрывай соединение.
А если нету Content-Length в заголовке?

Пакет который посылаю:
Код:
       send1:='GET http://site.ru/?p='+Form1.edit2.text+' HTTP/1.0'+#13#10+
'User-Agent: Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00'+#13#10+
'Host: site.ru'+#13#10+
'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1'+#13#10+
'Accept-Language: ru-RU,ru;q=0.9,en;q=0.8'+#13#10+
'Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1'+#13#10+
'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0'+#13#10+
'Cookie: megacookie=2222'+#13#10+
'Cookie2: $Version=1'+#13#10+
'Connection: Keep-alive'+#13#10+#13#10;
При:
Код:
Connection: Close
Не так принимаются данные почему то (в конце html ответа еще какие то куски html кода приходят при Connection: Close)

Последний раз редактировалось wolmer; 18.10.2009 в 23:54..
 
Ответить с цитированием

  #4659  
Старый 18.10.2009, 23:18
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

ты что через прокси шлеш запрос?
убери 'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0'+#13#10+
чтобы небыло проблем с приходом данных в gzip

чтото типа такого долно быть при обычном запросе. т.е. этого хватит
Код:
send1:='GET /?p='+Form1.edit2.text+' HTTP/1.0'+#13#10+
'User-Agent: Opera/9.80 (Windows NT 5.1; U; en) Presto/2.2.15 Version/10.00'+#13#10+
'Host: site.ru'+#13#10+
'Cookie: megacookie=2222'+#13#10+
'Connection: close'+#13#10#13#10;
 
Ответить с цитированием

  #4660  
Старый 19.10.2009, 00:26
bmp152
Новичок
Регистрация: 25.05.2009
Сообщений: 15
Провел на форуме:
269065

Репутация: 6
По умолчанию

Цитата:
bmp152, вот еще, кстати, попробуйте функцию (переписывал под себя, чтобы капчу на диск не сохранять)
спс, попробуем)
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[jQuery] - Задай вопрос, получи ответ Isis PHP 62 25.12.2009 03:25



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ