![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
exit и procedure
Res © (2008-06-20 21:49:00)Здравствуйте..
имеется процедура test
procedure test;
begin
....
if(...) then exit;
...
end;
При запуске данной процедуры в потоке, почему то торзмозит весь поток, т.е. код дальше не выполняется после этой процедуры
Сергей М. (2008-06-21 22:28:00) [1]
> прога все больше и больше жрет памяти
Не мудрено, что "жрет".
Ты ж сам ее и "скармливаешь" всякий раз, когда вызываешь EndThread)
Loginov Dmitry (2008-06-21 09:00:00) [2]> command:=param;
> sss:=command^;
> freemem(param,SizeOf(string));
это что? Объясни, что хотел сделать.
Тын-Дын (2008-06-20 23:33:00) [3]Удалено модератором
Игорь Шевченко (2008-06-20 23:30:00) [4]Res (20.06.08 23:24) [9]
слова "test", "exit" потерялись при копировании.
Тын-Дын (2008-06-20 23:30:00) [5]Удалено модератором
Примечание: Достал. Читай правила
Тын-Дын (2008-06-20 23:29:00) [6]
> rst:=test(saccount,sproxy,sss);
Что процедура-то делает? Из твоего кода мало что понятно.
Res (2008-06-20 23:24:00) [7]Еще проблема в том, что прога все больше и больше жрет памяти...
>
>
> Покажи код потока. Без этого не имеет смысла обсуждать что-
> то.
>
> PS. Не обращай внимания на детские комментарии. Здесь и
> такие ходят.
Запускаю поток:
BeginThread(nil,0,Addr(thread),Addr(ggg),0,id);
Сам поток:
procedure thread(param:pointer);
var
command:^string;
sss:string;
sproxy,saccount:string;
x,y:integer;
rst:integer;
label
lproxy,laccount;
begin
command:=param;
sss:=command^;
freemem(param,SizeOf(string));
if(sss='') then EndThread(0);
laccount:
saccount:='';
EnterCriticalSection(form1.cs);
saccount:=getaccount;
LeaveCriticalSection(form1.cs);
//sleep(1115000);
if(saccount='') then EndThread(0);
lproxy:
sproxy:='';
EnterCriticalSection(form1.cs);
sproxy:=getproxy;
LeaveCriticalSection(form1.cs);
if(sproxy='') then EndThread(0);
//messagebox(0,PAnsiChar(sproxy),'',0);
rst:=test(saccount,sproxy,sss);
// messagebox(0,PAnsiChar(saccount),'',0);
if(rst=0) then
begin
EnterCriticalSection(form1.cs);
x:=0;
while(x<=form1.account.Count-1) do
begin
if(form1.account.Strings[x]=saccount) then
begin
form1.account.Delete(x);
x:=x-1;
end;
x:=x+1;
end;
LeaveCriticalSection(form1.cs);
goto laccount;
end
else if(rst=1) then
begin
EnterCriticalSection(form1.cs);
x:=0;
while(x<=form1.proxy.Count-1) do
begin
if(form1.proxy.Strings[x]=sproxy) then
begin
form1.proxy.Delete(x);
x:=x-1;
end;
x:=x+1;
end;
LeaveCriticalSection(form1.cs);
goto lproxy;
end;
...
EndThread(0);
end;
Тын-Дын (2008-06-20 23:23:00) [8]Удалено модератором
Игорь Шевченко (2008-06-20 23:20:00) [9]Удалено модератором
Тын-Дын (2008-06-20 23:19:00) [10]Удалено модератором
Palladin (2008-06-20 22:57:00) [11]
>Сергей М. © (20.06.08 22:49) [4]
не принимай аффтара слишком близко к сердцу... он месяца три назад строки разбирать начал... теперь у младенца в руках перфоратор в виде потоков... он ими теперь строки разбирает... на каждую строчку - поток
Сергей М. (2008-06-20 22:49:00) [12]Ладно хоть не угроза..
> Res (20.06.08 21:49)
</I
> При запуске данной процедуры в потоке
Это еще надо умудриться - запустить процедуру нев потоке..
McSimm (2008-06-20 22:23:00) [13]Наверное это было предупреждение, не вопрос.
Сергей М. (2008-06-20 22:11:00) [14]
> торзмозит .., т.е. .. не выполняется
Прелюбопытные синонимы)
Игорь Шевченко (2008-06-20 21:50:00) [15]не компилируется