ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

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

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

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

Репутация: 3349


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

2 transserg а ты не думал, что программа во время выполнения могла сменить текщую директорию? Или допустим быть запущенной с другой текущей директорией.
типа типа \dir\dir\prog.exe
А вообще я уже человеку объяснил что пути нужно брать в ковычки, и предварительно перегонять из Ansi в OEM
 
Ответить с цитированием

  #4802  
Старый 05.11.2009, 11:08
0ldbi4
Постоянный
Регистрация: 14.04.2008
Сообщений: 327
Провел на форуме:
584699

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

Почему строчка:
ReadLn(f, memo1.Lines.add);
Дает эту ошибку:
[DCC Error] UnitX.pas(59): E2035 Not enough actual parameters
 
Ответить с цитированием

  #4803  
Старый 05.11.2009, 11:20
transserg
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме:
1035284

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

потому что memo1.Lines.add это метод тоесть функция а не строка
сделай так
Код:
var
   s:string;
begin
   ReadLn(f, s);
   memo1.Lines.add(s);
end;

Последний раз редактировалось slesh; 05.11.2009 в 11:30.. Причина: Опечатка в коде )
 
Ответить с цитированием

  #4804  
Старый 05.11.2009, 11:38
0ldbi4
Постоянный
Регистрация: 14.04.2008
Сообщений: 327
Провел на форуме:
584699

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

Уже разобрался, но всё равно спасибо
 
Ответить с цитированием

  #4805  
Старый 05.11.2009, 11:57
Пуховой
Banned
Регистрация: 25.11.2007
Сообщений: 62
Провел на форуме:
1702086

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

Использую при создании ПО критические секции. Но одна из последних программ постоянно зависает и, чую я, по вине неправильного их использования.

Грешу на кусочек кода в потоке:
Код:
  if accounts.Count > 0 then
  begin
    CriticalSection.Enter;
      account := accounts.Strings [0];
      accounts.Delete (0);
    CriticalSection.Leave;
  end else
  begin
    to_log ('come to an end accounts');
    exit;
  end;
и функцию:
Код:
function to_used (str : string) : integer;
var
  t : textfile;
begin
  CriticalSection.Enter;
    assignfile (t, curdir + '\config\send - used accounts.txt');
    append (t);
    writeln (t, str);
    closefile (t);
  CriticalSection.Leave;
  Result := 1;
end;
accounts - tstringlist массив строк, строки в него загружаются из файла, при запуске программы.

Кто что может посоветовать?

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

  #4806  
Старый 05.11.2009, 12:36
transserg
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме:
1035284

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

Пуховой
попробуй использовать
Код:
 var
  sect1 : TRTLCriticalSection;
В форм криэйт
Код:
 initializeCriticalSection(sect1);        // Инициализации критической секции
Код:
EnterCriticalSection (sect1); //войти в критическую секцию
//Твой код критического участка
LeaveCriticalSection(sect1); //выйти в критическую секцию
а это на форм дестрой
Код:
  DeleteCriticalSection(sect1);
а ты случаем ни где не используеш terminateThread?
проверь еще выходит ли поток из критической секции..

Последний раз редактировалось transserg; 05.11.2009 в 12:43..
 
Ответить с цитированием

  #4807  
Старый 05.11.2009, 12:52
Пуховой
Banned
Регистрация: 25.11.2007
Сообщений: 62
Провел на форуме:
1702086

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

transserg, спасибо, буду пробовать без "обертки" TCriticalSection.

Тестирую очень просто.

Код потока без обертки TCriticalSection:
Код:
procedure inv.Execute;
begin
  EnterCriticalSection (CriticalSection);
    form1.Memo2.Lines.Add (timetostr (time));
  LeaveCriticalSection (CriticalSection);
  new_inv (); // запуск нового потока
end;
Код потока с оберткой TCriticalSection:
Код:
procedure inv.Execute;
begin
  CriticalSection.Enter;
    form1.Memo2.Lines.Add (timetostr (time));
  CriticalSection.Leave;
  new_inv (); // запуск нового потока
end;
Второй вариант "поломался" на 20000-ной строчке в memo. Первый (ваш) пока работает, тьфу-тьфу-тьфу.

Буду тестировать, спасибо огромное!
 
Ответить с цитированием

  #4808  
Старый 05.11.2009, 13:30
Пуховой
Banned
Регистрация: 25.11.2007
Сообщений: 62
Провел на форуме:
1702086

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

Отловил я-таки момент зависания.

В процедуре обновления списка прокси-серверов.

Код:
procedure TForm1.Timer3Timer(Sender: TObject);
var
  s : widestring;
  http : tidhttp;
begin
  http := tidhttp.create;
  http.ReadTimeout := 30000;
  s := httpget (http, 'http://awmproxy.com/proxy.php?Id=********&d=1');
  if extractb (s, '[^\r\n]*[^\r\n]') <> nil then
  begin
    CriticalSection.Enter;
      proxys.Clear;
      proxys.AddStrings (extractb (s, '[^\r\n]*[^\r\n]'));
    CriticalSection.Leave;
  end;
  http.Free;
end;
В момент, когда критическая секция занята, в нее стучится этот код. И все - зависает.

Как иправить, подскажите, пожалуйста
 
Ответить с цитированием

  #4809  
Старый 05.11.2009, 13:42
transserg
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме:
1035284

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

Пуховой попробуй не таймер использовать а отдельный поток
 
Ответить с цитированием

  #4810  
Старый 05.11.2009, 13:43
Пуховой
Banned
Регистрация: 25.11.2007
Сообщений: 62
Провел на форуме:
1702086

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

transserg, так и сделал... Но сама суть - почему все-таки программа зависает, при стуке таймера в критическую секцию? Вопрос покоя не дает
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Wi-Fi, BT] Задай вопрос - получи ответ! Alexsize Беспроводные технологии/WPAN/WLAN 2567 19.04.2026 23:21
[ *NIX ] Задай вопрос - получи ответ. Xszz *nix 1547 15.06.2010 15:41
[jQuery] - Задай вопрос, получи ответ Isis PHP, PERL, MySQL, JavaScript 62 25.12.2009 03:25
ЕсТь ВоПрос Guma Чаты 4 26.10.2005 21:48



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


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




ANTICHAT.XYZ