Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];

Вниз

Убийство потока через сообщение   Найти похожие ветки 

 
Talla2k   (2003-11-15 12:30) [0]

Имеется следуюший код :

procedure TForm1.Button1Click(Sender: TObject);
begin
CommThread := CreateThread(nil,0,@POTOK,nil,0,ThreadID); // рождение потока
setthreadpriority(commthread,2);
end;

procedure potok;
var i:integer;
outst:string;
begin

for i:=1 to 50 do begin
form1.bsSkinGauge1.value:=(i*100)div 50;
if READTABLE("R0;"+inttostr(i)+";",outst)=false then begin
exitcomm;
closecomm;
sendmessage(Form1.handle,_mymessage,1,0);
end else form1.Memo1.lines.add(outst);
end;
form1.bsSkinGauge1.value:=0;
exitcomm;
closecomm;
sendmessage(Form1.handle,_mymessage,1,0);
end;

procedure TForm1.MyMessage(var Msg:TMessage);
begin
terminateThread(CommThread,0);
closehandle(CommThread); //убийство потока
end;

Вопрос : правильно ли я убиваю поток?
И еще существует ли способ убийства без использования сообщений???


 
clickmaker   (2003-11-15 12:35) [1]

Неправильно

try
for i:=1 to 50 do begin
form1.bsSkinGauge1.value:=(i*100)div 50;
if READTABLE("R0;"+inttostr(i)+";",outst)=false then Exit
else form1.Memo1.lines.add(outst);
end;
form1.bsSkinGauge1.value:=0;
finally
exitcomm;
closecomm;
end;


 
Talla2k   (2003-11-15 12:38) [2]

to clickmaker
Я вообще спрашивал про убийство потока!!!
С тем я как-то сам разберусь!


 
Digitman   (2003-11-15 13:04) [3]


> правильно ли я убиваю поток?


в принципе - правильно.
но делать это крайне не рекомендуется, ибо это аварийный способ, т.е. способ уничтожить поток, который не завершается в ожидаемые сроки ожидаемым (штатным) образом и не реагирует ни на какие сигналы извне.


> существует ли способ убийства без использования сообщений?


существует.
это способ при помощи сист.объектов синхронизации : мьютексы, ивенты, семафоры и пр.

но чем тебя не устраивают сообщения - непонятно.

теперь - по остальному коду.

поточная ф-ция у тебя объявлена и реализована неверно, правильно будет вот так :

function potok( Param: Pointer): DWord; stdcall;
begin
... //здесь - собственно логика поточной ф-ции
Result := результат; //необязательно
ExitThread(результат);//обязательно ! поток завершает свою работу вызовом этой ф-ции !
end;

в теле поточной ф-ции не допускается прямое обращение к оконным VCL-контролам, работающим с канвой, без синхронизации таких обращений с осн.код.потоком процесса.


 
Talla2k   (2003-11-15 13:22) [4]

: to Digitman
Насколько я понял,эта поточная ф-ция приведенная тобой не нуждается в убийстве через сообщение???Или я неправильно понял???

И еще насчет прямого обращения к оконным VCL-контролам работающим с канвой,а как быть???
Мне обязательно необходимо передавать в form1.bsSkinGauge1.value и принимать из StringGrid.Cells.


Может подскажешь где посмотреть исходник по работе с потоком (как ты говориш с СИНХРОНИЗАЦИЕЙ )
Очень НАДО!!!Подскажи пожалуйста!!!!!!


 
Digitman   (2003-11-15 13:37) [5]

пример есть в каталоге демо-проектов в составе Делфи : threads.dpr


 
Talla2k   (2003-11-15 16:46) [6]

to Digitman
У меня Delphi 5,а пример тот вообще не похож на то о чем мы говорили! Не могли бы Вы выслать пример получше!


 
Digitman   (2003-11-16 11:44) [7]


> Talla2k


я и говорю - этот пример как раз в Делфи5, за другие версии не ручаюсь

чем же он не похож ? только тем, что треды там программируются с использованием готового класса TThread, а не прямыми вызовами WinAPI ? И что тебя в этом смущает ? Из всего этого примера важно самое шлавное - логика синхронизации обращений к VCL-контролам из доп.код.потока



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.011 c
3-63000
ПЕТЯ
2003-12-22 07:42
2004.01.20
Строка в SQL?


7-63426
Tik
2003-11-06 17:35
2004.01.20
Иконки в ХР


1-63226
KSergey
2004-01-09 13:31
2004.01.20
Назначение обработчиков событий объекту WordApplication


14-63406
Артём Запаранюк
2003-12-27 16:11
2004.01.20
Обязательно ли хороший программист об. быть хорошим шахматистом


1-63145
Kettle of delphi
2004-01-10 15:50
2004.01.20
OnPaint окна приложения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский