Главная страница
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.017 c
1-18314
Лана Розанова
2003-09-21 16:41
2003.10.06
Запуск сервиса


14-18552
3247678234
2003-09-19 07:57
2003.10.06
Net Vampire - классная прога!


1-18447
d_oleg
2003-09-24 18:53
2003.10.06
ics Ftp client - получить размер и дату файла


1-18338
stkatch
2003-09-23 14:18
2003.10.06
Как узнать имя файла пакета?


7-18662
Opryshok
2003-07-21 17:48
2003.10.06
как остановить поток?