Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1255966439
oldman
2009-10-19 19:33
2009.12.20
Говорят, сегодня День лицеев.


15-1255988155
Германн
2009-10-20 01:35
2009.12.20
Ещё один дурацкий вопрос.


2-1256967606
Keba
2009-10-31 08:40
2009.12.20
Вопросы с перемещением объектов по форме


15-1256112238
vajo
2009-10-21 12:03
2009.12.20
Вопрос по Windows


11-1163789456
SKA1997
2006-11-17 21:50
2009.12.20
Форма прозрачная для кликов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский