ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

05.11.2009, 10:27
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
2 transserg а ты не думал, что программа во время выполнения могла сменить текщую директорию? Или допустим быть запущенной с другой текущей директорией.
типа типа \dir\dir\prog.exe
А вообще я уже человеку объяснил что пути нужно брать в ковычки, и предварительно перегонять из Ansi в OEM
|
|
|

05.11.2009, 11:08
|
|
Постоянный
Регистрация: 14.04.2008
Сообщений: 327
Провел на форуме: 584699
Репутация:
69
|
|
Почему строчка:
ReadLn(f, memo1.Lines.add);
Дает эту ошибку:
[DCC Error] UnitX.pas(59): E2035 Not enough actual parameters
|
|
|

05.11.2009, 11:20
|
|
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме: 1035284
Репутация:
52
|
|
потому что memo1.Lines.add это метод тоесть функция а не строка
сделай так
Код:
var
s:string;
begin
ReadLn(f, s);
memo1.Lines.add(s);
end;
Последний раз редактировалось slesh; 05.11.2009 в 11:30..
Причина: Опечатка в коде )
|
|
|

05.11.2009, 11:38
|
|
Постоянный
Регистрация: 14.04.2008
Сообщений: 327
Провел на форуме: 584699
Репутация:
69
|
|
Уже разобрался, но всё равно спасибо
|
|
|

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 массив строк, строки в него загружаются из файла, при запуске программы.
Кто что может посоветовать?
Заранее спасибо.
|
|
|

05.11.2009, 12:36
|
|
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме: 1035284
Репутация:
52
|
|
Пуховой
попробуй использовать
Код:
var
sect1 : TRTLCriticalSection;
В форм криэйт
Код:
initializeCriticalSection(sect1); // Инициализации критической секции
Код:
EnterCriticalSection (sect1); //войти в критическую секцию
//Твой код критического участка
LeaveCriticalSection(sect1); //выйти в критическую секцию
а это на форм дестрой
Код:
DeleteCriticalSection(sect1);
а ты случаем ни где не используеш terminateThread?
проверь еще выходит ли поток из критической секции..
Последний раз редактировалось transserg; 05.11.2009 в 12:43..
|
|
|

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. Первый (ваш) пока работает, тьфу-тьфу-тьфу.
Буду тестировать, спасибо огромное!
|
|
|

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;
В момент, когда критическая секция занята, в нее стучится этот код. И все - зависает.
Как иправить, подскажите, пожалуйста 
|
|
|

05.11.2009, 13:42
|
|
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
Провел на форуме: 1035284
Репутация:
52
|
|
Пуховой попробуй не таймер использовать а отдельный поток
|
|
|

05.11.2009, 13:43
|
|
Banned
Регистрация: 25.11.2007
Сообщений: 62
Провел на форуме: 1702086
Репутация:
89
|
|
transserg, так и сделал... Но сама суть - почему все-таки программа зависает, при стуке таймера в критическую секцию? Вопрос покоя не дает 
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|