![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Увеличится ли скорость в моём случае если я сделаю 2 потока? [D7, WinXP]
rolex © (2005-03-08 18:45:00)Моя прога предположим ищет файлы на винте. Увеличится ли скорость общего поиска, если я его разобью на 2 потока?
Defunct (2005-03-15 10:10:00) [1]except
on E:Exception do ShowMessage(E.ClassName+' ' +E.Message)
end
inherited;
end;
То что жирным выделил удалил из кода. А то компилятор ругался.
точка с запятой после end потерялась.
rolex (14.03.05 21:57) [80]
Strings := TStringList.Create;
В OnCreate формы перенесите
А в Button1Click - замените Strings := TStringList.Create; на Strings.Clear;
GuAV (2005-03-14 23:13:00) [2]А самое прикольное то, что этот inherited хоть и нафиг не нужен для WM_USER + 90, ошибка компиляции вызванная его наличием IMHO указывает на ошибку при копировании кода, т.к. в message методе inherited есть вызов обработчика сообщения наследника, и не исключено что в этом и заключается причина [80].
Anatoly Podgoretsky (2005-03-14 23:09:00) [3]Ну это уровень компетентности программиста.
Молодец, наш человек - переписать все нафиг :-)
Дмитрий Мыльников (2005-03-14 23:06:00) [4]А я бы вообще запретил использовать статические процедуры и функции. :)))
Просто недавно пришлось одну прогу переделывать, так мы там с этими статическими функциями намучались. Вроде начнается иерархия классов, всё как у взрослых, только большая часть фукнций в базовых классах объявлена abstract. А ещё чуть позже выяснилось, что в конечных классах понатыкано вызовов из статических функций, и всё это ООП тем самым "коту под хвост". Её уже не перекроешь никак, и виртуальной не объявишь. Короче, пришлось всё почти полностью переделывать...
Anatoly Podgoretsky (2005-03-14 22:59:00) [5]Естественно это только для методов.
Дмитрий Мыльников (2005-03-14 22:55:00) [6]Небольшое замечание по ООП в Delphi.
Во-первых, между записью
Inherited;
и
Inherited Create(False);
очень большая разница. Не помню начиная с какй версии, но в D7 точно, если написано просто Inherited, то компилятор подставляет вызов функции предка только в тех случаях, когда она в нём действительно существует. То есть, если в предке она объявлена abstract, либо не объявлено вовсе, то никакого вызова вставлено не будет. Зато если позже она перестанет быть абстрактной или появляется в предке, и в ней появится какой-то код, то вызов будет выполнен.
Если же написать с явным указанием, как во втором случае, то компилятор будет пытаться подставлять вызов всегда, в результате чего будет либо ошибка во время компиляции, либо abstract error во время выполнения (жаль только, что этот механизм не работает для функций).
rolex (2005-03-14 21:57:00) [7]To Defunct:
Ууу... я страшный баг нашёл.
Когда запустите прогу, посмотрите в Диспетчере Задач скока она места в ОЗУ съедает. Ок запомнили. Потом каждый раз при нажатии кнопки "Скан", размер проги в ОЗУ всё больше и больше растёт!!!
rolex (2005-03-14 18:32:00) [8]Всё ништяк прога! Всю ночь буду в код въезжать, чтобы сибе также сделать!!! Скорость рулевая!!!
Тока вот тут ошибочка:
procedure TForm2.UpdateList;
var
AList : TStrings;
begin
try
AList := ST.ExportList;
Strings.AddStrings( AList );
AList.Free;
UpdateControls;
except
on E:Exception do ShowMessage(E.ClassName+' ' +E.Message)
end
inherited;
end;
То что жирным выделил удалил из кода. А то компилятор ругался.
А dpr файл такой должен получиться, да?:
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm2, Form2);
Application.Run;
end.
Alexander Panov (2005-03-14 18:26:00) [9]begin...end © (14.03.05 18:11) [77]
Ок, спасибо, буду знать.
К сожалению, только реализация TThread отстала по времени.
begin...end (2005-03-14 18:11:00) [10]> GuAV © (14.03.05 18:04) [75]
> Alexander Panov © (14.03.05 18:09) [76]
AfterConstruction в Delphi 4 появился.
Alexander Panov (2005-03-14 18:09:00) [11]GuAV © (14.03.05 18:04) [75]
Насчет реализации AfterConstruction в D6 может быть заблуждаюсь, так как обратил внимание на него только лишь в связи с изменением реализации TThread в D6.
GuAV (2005-03-14 18:04:00) [12]
> так как, начиная с D6 изменилась реализация TObject -
> появился метод AfterConstruction
Аж только в D6 ? не знал...
Defunct (2005-03-14 17:51:00) [13][73]
угу
begin...end (2005-03-14 17:50:00) [14]> Defunct © (14.03.05 17:47) [72]
Delphi 5?
Defunct (2005-03-14 17:47:00) [15]GuAV © (14.03.05 17:36) [70]
constructor TThread.Create(CreateSuspended: Boolean);
var
Flags: DWORD;
begin
inherited Create;
AddThread;
FSuspended := CreateSuspended;
Flags := 0;
if CreateSuspended then Flags := CREATE_SUSPENDED;
FHandle := BeginThread(nil, 0, @ThreadProc, Pointer(Self), Flags, FThreadID);
end;
Alexander Panov (2005-03-14 17:44:00) [16]GuAV © (14.03.05 17:36) [70]
Так что, если заменить на inherited Create(False); , универсальности не будет ?
Не будет.
Код будет направильно работать в D5, например,
так как, начиная с D6 изменилась реализация TObject - появился метод AfterConstruction, который вызывается после завершения выполнения любого конструктора.
GuAV (2005-03-14 17:36:00) [17]
> Alexander Panov ©
Так что, если заменить на inherited Create(False); , универсальности не будет ?
Defunct (2005-03-14 17:35:00) [18]> P.S. А почему List нигде не освобождается? Или я что-то не заметил?
TForm2.UpdateList
begin...end (2005-03-14 17:34:00) [19]Ну вопрос-то был про Delphi 7.
Alexander Panov (2005-03-14 17:33:00) [20]И еще, как насчет изменения логики TThread в следующих версиях?