Главная страница
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.016 c
1-18460
LinOS
2003-09-26 05:35
2003.10.06
Как определить что форма создана


3-18278
glow
2003-09-16 12:51
2003.10.06
Запрос


14-18540
Ru
2003-09-17 10:43
2003.10.06
http://deep.webm.ru/forum/reply.php?num=3.1&id=39787


1-18302
puny
2003-09-22 13:54
2003.10.06
Time in Delphi


14-18598
Vlad Oshin
2003-09-11 18:35
2003.10.06
к ветке Какой вы политической ориентации?