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

Вниз

Kak vozmojno ubit potok v kotorom bezkanechni cikl?   Найти похожие ветки 

 
Delphi5.01 ©   (2003-09-21 20:28) [0]

Dobroe vrema sutok!
privoju kod
procedure TReadThread.DoWork;
begin
While true do
Application.ProcessMessages;
end;

procedure TReadThread.Execute;
begin
While Not Terminated do
Synchronize(DoWork);
end;

procedure TForm1.Button1Click(Sender: TObject);
var F: TReadThread;
T: Integer;
begin
F:=TReadThread.Create(False);
F.FreeOnTerminate:=True;
T:=GetTickCount;
While GetTickCount-t<100 do
Application.ProcessMessages;
F.Terminate;
end;


Kak vozmojno ubit potok v kotorom bezkanechni cikl?
P.S. v dannom primere programa zaciklivaetsa na cikle
While GetTickCount-t<100 do
Application.ProcessMessages;
ona ne poluchaet novoe znachenie GetTickCount;
vopros ochen slojni


 
Alex Konshin ©   (2003-09-22 00:59) [1]

Нужно, чтоб сам поток периодически проверял какой-нибудь event, а главная нить в нужный момент его должна выставлять.
Смотри http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/synchronization.asp
Если же поток производит какие-то операции, которые могут зависнуть, например, соединение через интернет, то тогда для запуска этих оперций используй функции, в которых можно указать таймаут, например, для winsock2 практически в любом значительном вызове можно это сделать.


 
Delphi5.01 ©   (2003-09-22 06:57) [2]

Ia ispolzuiu funksiu Read u TFileSream, no ei ne vozmojno ustanovit taimaut, i po etoi prichine ia i vzal Thread


 
Alex Konshin ©   (2003-09-22 08:37) [3]

Так кто тебя заставляет использовать TFileStream?
Вызывай ReadFile сам. http://msdn.microsoft.com/library/en-us/fileio/base/readfile.asp
Или еще красивее: создай свой класс-наследник от TFileStream, добавь ему property Timeout и перекрой метод Read (он реализован в THandleStream) так, чтоб он вызывал ReadFile с таймаутом. Это же совсем нетрудно, не так ли?

Я очень не рекомендую бездумно использовать классы и компоненты из VCL при работе с нитями. Помните: VCL писалось без расчета на использования ее в multithread среде. Например, для TFileStream проблем вроде как и не видно, но как видишь, они есть.


 
Evgeny V ©   (2003-09-22 08:53) [4]

Поток у тебя неверно построен в Execute (да весь код не очень удачно), в чем прелесть твоего потока, если ты синхронизмом отдаешь работу в поток основного окна, мог бы с таким же успехом просто вызвать нужную процедуру или послать PostMessage в главной форме себе же? Убить зависший поток можно TerminateThread, см хелп, но лучше не допускать "зависания" по возможности. используй ожидание сообщений в потоке или событий, что бы поток "уснул", если ему нечего делать. Смотри WaitMessage и PostThreadMessage, PeekMessage или для событий WaitForSingleObject или WaitForMultipleObjectsb и SetEvent и ResetEvent.


 
Delphi5.01 ©   (2003-09-23 17:46) [5]

To Alex Konshin
idea ochen ponravilas, no vot problema to uma ne smog dovesti, tipa prochital MSDN (kstati on u mena na kompe ustanovlen :-)), no proga daiot 87 oshibku pri ustanovke SetCommTimeouts, v chom delo? A tak Readfile rabotaet na 5.

Time.ReadIntervalTimeout:=10;
Time.ReadTotalTimeoutMultiplier:=10;
Time.ReadTotalTimeoutConstant:=10;
if Not SetCommTimeouts(F.Handle,Time) then
begin
ShowMessage("Cannot set timeout."+IntToStr(GetLastError));
halt;
end;

Spasibo.


 
pasha_golub ©   (2003-09-23 18:10) [6]

Есть грубый способ TerminateThread, но от него потом чего угодно ждать можно


 
Delphi5.01 ©   (2003-09-23 20:51) [7]

To [16]
Problema v drugom, potok nevozmojno ubit potomu chto on berot vse resursi na seba i glavnaia proga visnet

To [all]
problema reshaetsa ReadFile-om no ia ne mogu izmenit vrema oprosa, a po umolchaniu ochen bolshoe okolo 60 secun proveraet, i pitaetsa prochest baiti, a ia xochu ustanovit maksimum 5 sekund. dla etogo nado ispolzovat SetCommTimeouts no ia ne smog pravelno ego ispolzovat i po etoi prichine sprashivau kak eto vozmojno sdelat?
Spasibo.


 
SetCmmmTimeouts   (2003-09-24 07:14) [8]

Tak kak na schot SetCmmmTimeouts



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

Текущий архив: 2003.10.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
1-18454
Prima
2003-09-24 17:51
2003.10.06
Помогите с DLL


14-18549
PVOzerski
2003-09-18 11:06
2003.10.06
Винч потерялся :^(


8-18489
Gimer
2003-06-07 15:13
2003.10.06
Ms WordArt??


1-18353
RedEagle
2003-09-23 09:38
2003.10.06
Разноцветные строки в ListBox


14-18630
Феликс
2003-09-17 15:15
2003.10.06
Как эта пестня называется?