![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Dll и TThread [D5, D7, WinXP]
dms_main © (2004-10-29 10:02:00)
Страницы: < 1 2 3 4 5 6 7 8 9 >
Уважаемые мастера, обнаружил такой глюк.
Есть класс на основе стандартного Tthread,
креатится так:
constructor tmythread.create;
begin
inherited create(false);
end;
Проблема в том , что в dll невызывается execute, хотя в console Application все работало замечательно.
Как лечить?
sniknik (2004-10-29 11:21:00) [121]> как это понимать?
ты не то показываеш, хочеш чтобы по 18й строке нашли глюк в 17й. а то что показываеш нельзя назвать кодом, это один сплошной глюк, не скомпилится.
либо здесь урезано так что принимает другой вид.
Digitman (2004-10-29 11:20:00) [122]
> делфа у меня (5 и 7) кривые - компилят кривой код
дурью маешься, да ?
при чем здесь версия Делфи ? ты прявила Паскаля нарушил !
procedure TMythread.execute;
begin
assignfile(list,drive+'.txt');
rewrite(list);
FindFile(drive+':\round.txt');
closefile(list);
checkList:=TStringList.Create;
checklist.Duplicates:=dupIgnore;
checklist.Sorted:=true;
checkList.LoadFromFile(drive+'.txt');
checklist.SaveToFile(drive+'.txt');
checklist.Clear;
parseFile(drive+'.txt');
end;
mycountsection:=TcriticalSection.Create;
mycountsection.Enter;
try
threadcount:=threadcount-1;
finally
mycountsection.Leave;
mycountsection.Free;
end;
end;
то что подчеркнуто, это к чему относится ?
тело процедуры Execute - это то что между begin..end у тебя, а следом что за галиматься идет, скажи на милость ?
Reindeer Moss Eater (2004-10-29 11:18:00) [123]Иногда и медицина бессильна
dms_main (2004-10-29 11:17:00) [124]Воощем тут все ясно ......
все ушли от темы - помочь в итоге никто не в состоянии .....
Reindeer Moss Eater (2004-10-29 11:15:00) [125]Слева направо
dms_main (2004-10-29 11:12:00) [126]
> Потому что там работает другой код
как это понимать?
Reindeer Moss Eater (2004-10-29 11:11:00) [127]почему тогда это код в апликухе работает?
Потому что там работает другой код
dms_main (2004-10-29 11:11:00) [128]
> это даже скомпилировано быть не может
делфа у меня (5 и 7) кривые - компилят кривой код.... :-)))
dms_main (2004-10-29 11:10:00) [129]
> Вставил не первой строкой, либо конструктор не вызван.
>
> Аналогичный код в конструктор.
работает
> Либо процесс вообще не имет прав на томе на создание файлов
почему тогда это код в апликухе работает?
Апликуха которая грузит dll имеет права на создание файлов....
Reindeer Moss Eater (2004-10-29 11:09:00) [130]не расстраивайся, все просто, учись отвечать. ;о)
Я и других еще научу.
Digitman (2004-10-29 11:08:00) [131]это даже скомпилировано быть не может
какой уж разговор о куче несуразностей собственно в алгоритме ..
sniknik (2004-10-29 11:08:00) [132]> Обсуждается какой-то мифический несуществующий код.
> На кофейной гуще и то эффективнее гадать получается.
не расстраивайся, все просто, учись отвечать. ;о)
2 dms_main
у тебя ошибка в 17-й (семнадцатой) строке! че ты сюда 18-е (восемнадцатые) лепиш?
> я туда messagebox и MessageBeep($FFFFFFFF) вставлял пофиг...
VCL-ные или системные?
а секция действительно бред. что с чем синхронизируется, если оно все в одном блоке.
Reindeer Moss Eater (2004-10-29 11:07:00) [133]Либо процесс вообще не имет прав на томе на создание файлов
Reindeer Moss Eater (2004-10-29 11:06:00) [134]Вставил не первой строкой, либо конструктор не вызван.
Аналогичный код в конструктор.
dms_main (2004-10-29 11:04:00) [135]1:
> А что бы убедиться, что Execute все же вызывается, вставь
> первой строкой в него:
>
> with TFileStream.Create(Format('%d-log.txt',[GetCurrentThreadID]),fmCreate)
> do
> try
> WriteBuffer('А все таки она вертиться',24);
> finally
> Free;
> end;
нифига непишется
2:
в taskmanager есчетчик трэдов - их там в проге нужное кол-во
так execute и не вызвался...... :-((
Reindeer Moss Eater (2004-10-29 10:58:00) [136]Все твои критические секции только пожирают ресурсы и никого нахрен не синхронизируют.
Они - бред сивой кобылы.
А про вызов Execute читай в 24 посте.
Reindeer Moss Eater (2004-10-29 10:55:00) [137]млин ща весь выложу...
Уже не надо.
dms_main (2004-10-29 10:55:00) [138]
TMyThread = class(TTHread)
drive:char;
list:textfile;
checkList,sum:TStringList;
mysection:TcriticalSection;
mycountsection:TcriticalSection;
constructor create(adrive:char);
destructor free;
procedure execute;override;
procedure FindFile(path:string);
procedure parseFile(name:string);
end;
constructor tmythread.create(adrive:char);
var
p:pointer;
begin
inherited create(false);
assignfile(list,adrive+'.txt');
rewrite(list);
drive:=adrive;
FreeOnTerminate:=true;
Priority:=tpNormal;
mycountsection:=TcriticalSection.Create;
mycountsection.Enter;
try
threadcount:=threadcount+1;
finally
end;
mycountsection.Leave;
mycountsection.Free;
end;
destructor tmythread.free;
begin
inherited free;
end;
procedure TMythread.execute;
begin
assignfile(list,drive+'.txt');
rewrite(list);
FindFile(drive+':\round.txt');
closefile(list);
checkList:=TStringList.Create;
checklist.Duplicates:=dupIgnore;
checklist.Sorted:=true;
checkList.LoadFromFile(drive+'.txt');
checklist.SaveToFile(drive+'.txt');
checklist.Clear;
parseFile(drive+'.txt');
end;
mycountsection:=TcriticalSection.Create;
mycountsection.Enter;
try
threadcount:=threadcount-1;
finally
mycountsection.Leave;
mycountsection.Free;
end;
end;
Reindeer Moss Eater (2004-10-29 10:54:00) [139]это для тебя бред
Это бред не только для меня.
а execute нет....
Читай [24] и не свисти MessageBeep'ом
dms_main (2004-10-29 10:53:00) [140]млин ща весь выложу...