Форум: "Начинающим";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];
ВнизПотоки Найти похожие ветки
← →
den49 © (2009-11-01 23:14) [0]Здравствуйте. Помогите, пожалуйста, найти ошибку. Задача стоит так:два потока читают 2 файла, 3-ий поток их сравнивает построчно.Стринглисты заполняются верно, потоки тоже срабатывают, а строки почему-то не сравниваются :(
type
Struct = record
component:TMemo;
filename:string;
index:integer;
eventIsfull:Cardinal;
end;
Str_event = record
event1:Cardinal;
event2:Cardinal;
memo:TMemo;
end;
Pstruct=^Struct;
Pstr_event=^Str_event;
var
Form1: TForm1;
GetFile,GetFile2,CompareFile:THandle;
ThreadID1,ThreadID2,ThreadID3:Cardinal;
SL: array[0..2] of TStringList;
CL:array[0..1] of TstringList;
{$R *.dfm}
procedure SetText(N:Pstruct); stdcall;
begin
SL[N.index]:=TStringList.Create;
SL[N.index].LoadFromFile(N.filename);
N.component.Lines.Assign(SL[N.index]);
SetEvent(N.eventIsfull);
end;
procedure TextCompare(N:Pstr_event);stdcall;
var
i: integer;
begin
WaitForSingleObject(N.event1, INFINITE);
WaitForSingleObject(N.event2, INFINITE);
CL[0]:=TStringList.Create;
CL[1]:=TStringList.Create;
for i:=0 to SL[0].Count-1 do
begin
if (SL[0].Strings[i] = SL[1].Strings[i]) then
CL[0].Add(SL[0].Strings[i])
else
CL[1].Add(SL[0].Strings[i]);
end;
N.memo.Lines.Assign(CL[0]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var struct1,struct2:^struct;
struct3:^Str_event;
begin
new(struct1);
new(struct2);
new(struct3);
struct1^.eventIsfull := CreateEvent(nil,false,false, "ListIsfullEvent");
struct2^.eventIsfull := CreateEvent(nil,false,false, "ListIsfullEvent");
Opendialog1.Execute;
struct1^.filename:=OpenDialog1.FileName;
struct1^.component:=Memo1;
struct1^.index:= 0;
Opendialog2.Execute;
struct2^.filename:=OpenDialog2.FileName;
struct2^.component:=Memo2;
struct2^.index:= 1;
struct3^.event1:=struct1^.eventIsfull;
struct3^.event2:=struct2^.eventIsfull;
GetFile := CreateThread(NIL, 0, @SetText, struct1, 0, ThreadID1);
GetFile2 := CreateThread(NIL, 0, @SetText, struct2, 0, ThreadID2);
CompareFile := CreateThread(NIL, 0, @TextCompare, struct3, 0, ThreadID3);
end;
← →
brother © (2009-11-02 05:03) [1]на вскидку: синхронизация потоков где?
← →
brother © (2009-11-02 05:59) [2]упс поспешил...
← →
Сергей М. © (2009-11-02 08:26) [3]Убирай CreateThread.
BeginThread() !!
← →
Сергей М. © (2009-11-02 08:35) [4]Абсолютно бестолковый код, не говоря уже о грубых ошибках.
← →
Leonid Troyanovsky © (2009-11-02 09:27) [5]
> brother © (02.11.09 05:03) [1]
> на вскидку: синхронизация потоков где?
А нету.
Особенно трогателен повторный WFSO, типа,
не верь глазам своим.
--
Regards, LVT.
← →
Сергей М. © (2009-11-02 09:46) [6]
> Leonid Troyanovsky © (02.11.09 09:27) [5]
У него 3-й поток ждет по очереди завершения 1-го (1-й WFSO), потом 2-го (2-й WFSO)
← →
Leonid Troyanovsky © (2009-11-02 09:52) [7]
> Сергей М. © (02.11.09 09:46) [6]
> У него 3-й поток ждет по очереди завершения
1 и 2 - один и тот же event, бо имя одно.
--
Regards, LVT.
← →
Сергей М. © (2009-11-02 09:54) [8]
> бо имя одно
А, ну да .. не обратил внимания ..
Полная лажа в общем)
← →
brother © (2009-11-02 10:25) [9]> бо имя одно.
это сразу засмущало ;)
итог: в топку)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.12.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c