Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
ВнизDll и TThread Найти похожие ветки
← →
dms_main © (2004-10-29 10:02) [0]Уважаемые мастера, обнаружил такой глюк.
Есть класс на основе стандартного Tthread,
креатится так:
constructor tmythread.create;
begin
inherited create(false);
end;
Проблема в том , что в dll невызывается execute, хотя в console Application все работало замечательно.
Как лечить?
← →
Sandman25 © (2004-10-29 10:04) [1]В execute стоит Synchronized(MyMethod)?
← →
dms_main © (2004-10-29 10:05) [2]нет есть только CriticalSection....
← →
Reindeer Moss Eater © (2004-10-29 10:12) [3]Проблема в том , что в dll невызывается execute,
Потому что Resume не вызван
← →
Reindeer Moss Eater © (2004-10-29 10:14) [4]Или вообще не создан экземпляр
← →
dms_main © (2004-10-29 10:15) [5]TO Reindeer Moss Eater
1.кретиться не suspended
2.креатил с suspended , потом делал resume - непомогает.....
← →
dms_main © (2004-10-29 10:17) [6]все действия записанные в креате (с инкрементом threadcount(integer)) в critical section)проходят , а вот execute не вызывается....:-(
← →
Reindeer Moss Eater © (2004-10-29 10:17) [7]Чем получено знание, что Execute не вызывается?
← →
dms_main © (2004-10-29 10:18) [8]дебагом
← →
Reindeer Moss Eater © (2004-10-29 10:20) [9]Оптимизация или неправильный "дебаг"
← →
Reindeer Moss Eater © (2004-10-29 10:21) [10]Либо все таки не вызван конструктор.
Код вызова констсруктора написан, но он не вызывается.
← →
dms_main © (2004-10-29 10:23) [11]ну насчет дебага : при креате создается файл (свой для каждого трэда),при execute он заполняется. Итог файл создан но незаполнен.
← →
Reindeer Moss Eater © (2004-10-29 10:24) [12]код Execute показывай
← →
Reindeer Moss Eater © (2004-10-29 10:25) [13]Итог файл создан но незаполнен.
Создается один файл, а execute пишет в другой.
← →
Reindeer Moss Eater © (2004-10-29 10:26) [14]хотя в console Application все работало замечательно.
Глобальные переменные тому виной.
Как пить дать.
Имя файла например.
← →
dms_main © (2004-10-29 10:28) [15]имя файла предается трэду через параметр в креате.
в каждом трэде - уникальное
← →
Reindeer Moss Eater © (2004-10-29 10:29) [16]Код давай уже, да?
← →
Reindeer Moss Eater © (2004-10-29 10:30) [17]имя файла предается трэду через параметр в креате.
Что-то я не вижу, что передается.
Читая твой первый постинг.
← →
dms_main © (2004-10-29 10:33) [18]
var
List:textfile;
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;
← →
dms_main © (2004-10-29 10:34) [19]
constructor tmythread.create(drive:char);
begin
inherited create(false);
end;
было б в нем дело......
← →
Reindeer Moss Eater © (2004-10-29 10:37) [20]Это что? код Execute?
И нафик тогда там критическая секция которая создается при входе и уничтожается при выходе?
Кого она синхронизирует?
Что такое Drive? Поле класса или переменная модуля?
В общем бред какой-то.
И где все же передается имя файла?
← →
dms_main © (2004-10-29 10:40) [21]
> Что такое Drive? Поле класса или переменная модуля?
Drive : char - смотри след. пост
> И нафик тогда там критическая секция которая создается при
> входе и уничтожается при выходе?
> Кого она синхронизирует?
пременная threadcount:integer - счетчик трэдов...
и вообще мы от темы ушли - дело не в том что выскакивает ошибка - дело в том что execute метод не вызывается вообще.....
← →
Reindeer Moss Eater © (2004-10-29 10:42) [22]Drive : char - смотри след. пост
Да пофик чар она или стринг!
Переменная это или член класса потока?!
← →
dms_main © (2004-10-29 10:43) [23]
> Да пофик чар она или стринг!
> Переменная это или член класса потока?!
член класса потока - естественно...
← →
Reindeer Moss Eater © (2004-10-29 10:47) [24]В общем так.
Твоя критическая секция - полный бред.
А что бы убедиться, что Execute все же вызывается, вставь первой строкой в него:
with TFileStream.Create(Format("%d-log.txt",[GetCurrentThreadID]),fmCreate) do
try
WriteBuffer("А все таки она вертиться",24);
finally
Free;
end;
← →
Reindeer Moss Eater © (2004-10-29 10:49) [25]constructor tmythread.create(drive:char);
begin
inherited create(false);
end;
было б в нем дело......
И где сохранение параметра в классе?
← →
Reindeer Moss Eater © (2004-10-29 10:50) [26]Обсуждается какой-то мифический несуществующий код.
На кофейной гуще и то эффективнее гадать получается.
← →
dms_main © (2004-10-29 10:52) [27]
> В общем так.
> Твоя критическая секция - полный бред.
это для тебя бред
я туда messagebox и MessageBeep($FFFFFFFF) вставлял пофиг...
дело не в том бред или нет - там все проверено....
дело в том что метод create вызывается, а execute нет....
вот где загвоздка....
← →
dms_main © (2004-10-29 10:53) [28]млин ща весь выложу...
← →
Reindeer Moss Eater © (2004-10-29 10:54) [29]это для тебя бред
Это бред не только для меня.
а execute нет....
Читай [24] и не свисти MessageBeep"ом
← →
Reindeer Moss Eater © (2004-10-29 10:55) [30]млин ща весь выложу...
Уже не надо.
← →
dms_main © (2004-10-29 10:55) [31]
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:58) [32]Все твои критические секции только пожирают ресурсы и никого нахрен не синхронизируют.
Они - бред сивой кобылы.
А про вызов Execute читай в 24 посте.
← →
dms_main © (2004-10-29 11:04) [33]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 11:06) [34]Вставил не первой строкой, либо конструктор не вызван.
Аналогичный код в конструктор.
← →
Reindeer Moss Eater © (2004-10-29 11:07) [35]Либо процесс вообще не имет прав на томе на создание файлов
← →
Digitman © (2004-10-29 11:08) [36]это даже скомпилировано быть не может
какой уж разговор о куче несуразностей собственно в алгоритме ..
← →
sniknik © (2004-10-29 11:08) [37]> Обсуждается какой-то мифический несуществующий код.
> На кофейной гуще и то эффективнее гадать получается.
не расстраивайся, все просто, учись отвечать. ;о)
2 dms_main
у тебя ошибка в 17-й (семнадцатой) строке! че ты сюда 18-е (восемнадцатые) лепиш?
> я туда messagebox и MessageBeep($FFFFFFFF) вставлял пофиг...
VCL-ные или системные?
а секция действительно бред. что с чем синхронизируется, если оно все в одном блоке.
← →
Reindeer Moss Eater © (2004-10-29 11:09) [38]не расстраивайся, все просто, учись отвечать. ;о)
Я и других еще научу.
← →
dms_main © (2004-10-29 11:10) [39]
> Вставил не первой строкой, либо конструктор не вызван.
>
> Аналогичный код в конструктор.
работает
> Либо процесс вообще не имет прав на томе на создание файлов
почему тогда это код в апликухе работает?
Апликуха которая грузит dll имеет права на создание файлов....
← →
Reindeer Moss Eater © (2004-10-29 11:11) [40]почему тогда это код в апликухе работает?
Потому что там работает другой код
Страницы: 1 2 3 4 5 вся ветка
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.035 c