Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.20;
Скачать: CL | DM;

Вниз

Потоки   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
1-1229068695
Андрей Пл
2008-12-12 10:58
2009.12.20
DBChart показать данный о точке!


2-1257157663
Сергей
2009-11-02 13:27
2009.12.20
Как передать данные в CRReport.PrintOut


2-1257183644
Незнайка
2009-11-02 20:40
2009.12.20
Замена букв


1-1228851112
Tack
2008-12-09 22:31
2009.12.20
Как открыть длинный URL в браузере?


15-1256203947
Putnik
2009-10-22 13:32
2009.12.20
Помогите выбрать видеокарту