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

Вниз

TThread любимый.   Найти похожие ветки 

 
PSA   (2005-02-15 09:30) [0]

Всем доброго утра,дня,вечера(Кому как).
Маленький вопрос. В программе используется процесс. Может подскажите как реализовать выполнение фукции внутри потока через определенное время (доупустим через 1 час). Пробую Sleep(...),

//Это пример
procedure thInternet.Execute;
begin
 Synchronize(Start);
 repeat
   ,,,
    fInternetPub.Label1.Caption := IntToStr(StrToInt   (fInternetPub.Label1.Caption) + 1);
   Sleep(StrToInt(CurrToStr(fInternetPub.CurrencyEdit1.Value)));
   ,,,
 until Terminated;
 Synchronize(Stop);
end;

но при остановке процесса T1.Terminate, неходимо дождаться пока выполнится Sleep().
Если можете, то дайте совет, и как можно поподробнее...
Заранее благодарен


 
Чапаев ©   (2005-02-15 09:45) [1]

Может, TTimer тебе использовать? Ещё посмотри в сторону TimeSetEvent().


 
Digitman ©   (2005-02-15 10:00) [2]

type
TMyThread = class(TThread)
private
   FTimeout: DWord;
   hEvent: THandle;
protected
   procedure Execute; override;
public
   consructor Create(..., Timeout: DWord);
   destructor Destroy; override;
end;

..

consructor TMyThread.Create(..., Timeout: DWord);
begin
 FTimeout := Timeout;
 FEvent := CreateEvent(nil, False, False, nil);
 inherited Create(..);
end;

destructor TMyThread.Destroy;
begin
 if GetCurrentThreadId <> MainThreadId then
  SetEvent(FEvent);
 inherited;
 CloseHandle(FEvent);
end;

procedure TMyThread.Execute;
begin
..
 while True do
  begin
   DoSomething;
   if WaitForSingleObject(FEvent, FTimeout) = WAIT_OBJECT_0 then
     Break;      
  end;
..
end;

..

MyThread := TMyThread.Create(..., 60000);
sleep(5000);
MyThread.Free;


 
Ермак ©   (2005-02-16 14:03) [3]

Ну да, Digitman все правильно написал.

Только хочешь хороший совет - никогда не пользуйся стандартными потоками Delphi и C++ Builder. Они маленько глюкавые. Народ неоднократно с этим сталкивался (не буду врать, сам этого не встречал просто потому, что ВСЕГДА использую для потоков и синхронизации WIN API, что и всем советую).

Также борландовские сокеты глюкавые - это проявляется в необычных приложениях, когда используется много потоков, отсутсвтуют окна или программа вообще работает как сервис. Сочетание же борландовского потока с борландовским сокетом - смертельная вещь,  приложение начинает работать нестабильно от машины к машине.


 
Digitman ©   (2005-02-16 14:06) [4]


> никогда не пользуйся стандартными потоками Delphi и C++
> Builder. Они маленько глюкавые


аргументы ? ОБС ?


> Также борландовские сокеты глюкавые


тоже ОБС ?


> это проявляется в необычных приложениях, когда используется
> много потоков, отсутсвтуют окна или программа вообще работает
> как сервис


тоже ОБС ?


> Сочетание же борландовского потока с борландовским сокетом
> - смертельная вещь,  приложение начинает работать нестабильно
> от машины к машине


..

кривые руки и голова не есть аргумент.


 
Набережных С. ©   (2005-02-16 14:07) [5]

>Ермак ©   (16.02.05 14:03) [3]

Вся "глюкавость" TThread проистекает из кривых рук. И это не IMHO.


 
Ермак ©   (2005-02-16 14:26) [6]

Спасибо. Если хотите знать, я ими НИКОГДА не пользовался, я фанат Win API, поэтому мое криворучие тут не причем. Просто у нас в ВУЗе в прошлом году несколько курсовиков на эту тему были даны (сразу предупреждаю - не мне :-), в результате ни один не заработал как надо, пока не переделали на АПИ. Дело в том, что у нас сетка в ВУЗе необычная - на местах Win2000, а на серваке, который держит ActiveDirectory, стоит Linux и выдает профили через сервис Smb. В результате сокеты С++ Builder не состыковались с созданными на Linux-сервере. А про потоки в Дельфи подозреваю, что они не чистые потоки, а некий аналог волокон (Fiber) в Unix. Как известно, в WinAPI есть функции, эмулирующие такую вещь. Короче, вывод ясен: чем меньше прослоек между тобой и системой, тем надежней... После глюкавости С++ компиляторов я Борланду что-то не очень доверяю...
Хотя есть один момент: то, что я говорил, касется С++ Builder, но, как известно, код VCL в нем с Дельфой одинаковый.


 
Fay ©   (2005-02-16 16:31) [7]

2 Ермак ©   (16.02.05 14:26) [6]
В Винде есть и threads, и fibers. А про VCL-ные thread-ы, socket-ы и прочие TServiceApplication-а скажу только то, что сам ими не пользуюсь, т.к. они для меня не прозрачны; я читал их исходники, читал статьи по их применению, но ничего удобнее WinAPI + MSDN для себя не нашёл. Короче, это всё из области религии и личных предпочтений.

Про глюкавость C++ ничего не скажу - не встречал глюков


 
Digitman ©   (2005-02-16 17:06) [8]


> Если хотите знать, я ими НИКОГДА не пользовался


значит таки - ОБС ?)


> про потоки в Дельфи подозреваю, что они не чистые потоки,
> а некий аналог волокон (Fiber) в Unix


ну чушь же !

был бы "аналог" файберов - соотв.класс бы назывался TFiber
однако класс называется именно TThread !

Борланд за дурака держишь ?)


> сокеты С++ Builder не состыковались с созданными на Linux-сервере


в огороде бузина, в Киеве дядько ..

что , по-твоему, есть "сокеты" ?


 
Набережных С. ©   (2005-02-16 17:17) [9]


> Ермак ©   (16.02.05 14:26) [6]

Пожалуйста, хотя я и не о Вас говорил потому как Вы ссылались не на собственной опыт. Вот только зря вы так много в [6] написали. Знаете о чем этот пост говорит? О том, что Вы беретесь безапеляционно судить о вещах, о которых не имеете ни малейшего представления. Знаете, какое определение принято применять в таких случаях? Студенты не смогли что-то сделать - разумеется Борланд с МС виноваты, кто же еще? Кто еще-то виноват, если я чего-то не умею? Конечно они, заразы. А на тот факт, что этим инструментарием вполне успешно пользуются миллионы программистов, а некоторые даже делает очень приличные продукты, мы благополучно наплюем. Да чего смотреть на них, на недотеп. Какое-то дурацкое ООП придумали, глюкавое притом.
Вы даже не представляете, насколько  все это банально:( Я бы ни за что не стал с Вами спорить, еслиб не публичность Вашего заявления. Форум читают разного опыта люди, некоторые могут принять сей бред за чистую монету.


 
kaZaNoVa ©   (2005-02-16 18:14) [10]

Digitman ©   (16.02.05 17:06) [8]

> > сокеты С++ Builder не состыковались с созданными на
>Linux-сервере
>
>
>в огороде бузина, в Киеве дядько ..
>
> что , по-твоему, есть "сокеты" ?

может он к FTP серверу по HTTP-протоколу подключиться хотел .. мало ли .. вот и "нестыкуется" .. ))


 
Ермак ©   (2005-02-16 19:17) [11]

Ладно, ладно, предупредить же честно хотел...
У нас не студенты, а вся кафедра информатики с этой проблемой намучилась, после чего плюнули на эти классы и больше их не используют.

Насчет глюкавости Борланд... Не смешно. Программистам на Дельфи везет - Дельфа действительно очень стабильный и надежный компилятор. Но когда я перешел на С++, налетел на огого сколько проблем с Борландом. Для учебных целей почему-то используется не Builder, а Borland C++ 5.0 - этот компилятор реально может давать на выходе неверный код. И народ на это реально налетает. Пока писали на Паскале, я на крики студентов "Паскаль сломался!" тоже говорил LMD, руки кривые, мозги не там... А вот относительно С++ иногда правдой оказывается... На программах со сложными вычислениями, например, фракталами, совершенно разный результат может получиться в режиме с оптимизацией и без. Поэтому однозначно рекомендую дял серьезных вещей компилятор от Microsoft, ну или на крайняк C++ Builder. Еще занкомые ребята из московской фирмы налетели на глюк компилятора IBM, когда при использовании в операторе вызова функции оператора ++ приоритет обрабатывался неправильно... Вот так вот бывает.

Глюкавая вещь - редактор COM-бибилиотеки типов. Там надо либо все мышкой, либо все с клавиатуры, а и так и так нельзя - ругаться начинает на пустое место. И сохранить, зараза, не позволяет, пока ошибку не исправишь... А какая ошибка в первой строчке IDL на первой скобке, если вручную написано один в один как он сам пишет?

Короче, понесло меня что-то. Извиняйте, ребята, не прибейте только по ошибке как ламера... я не он, честное слово...


 
Verg ©   (2005-02-16 20:44) [12]


> Ермак ©   (16.02.05 19:17) [11]


Ты это к чему?
Есть програмер и есть компиляторы - нет другой альтернативы, есть только альтернативный выбор. Каждому свое. Можно и лифт вызвать "глюкаво".
Насчет глюкавости компилеров могу сказать только одно - чем больше они (язык) обещают "возможностей", тем более они (компилеры) "глюкавые". И все это потому, что все эти "стандарты" каждый из производителей компилеров понимает по-разному, +обычный чел. фак.
Одно могу сказать, как проверенный факт - gcc - лучший из всех глюкодромов C++, а про Паскаль.... Паскаля больше нет, есть Дельфи (на почве Win32)... и Дельфи компилер внушает доверие по полной программе.... Впрочем компилерописатели от Борланд всегда отличались стабильными результатами (правда, это не касается оптимизаторов :))))


 
Набережных С. ©   (2005-02-16 21:26) [13]


> Еще занкомые ребята из московской фирмы налетели на глюк
> компилятора IBM, когда при использовании в операторе вызова
> функции оператора ++ приоритет обрабатывался неправильно

Это не глюк. Стандарт никак не регламентирует данный случай, поэтому каждый производитель компиляторов волен устанавливать собственные правила, что и происходит. В си действительно много тонкостей, которые просто нужно знать, чтобы не налететь на подводные камни.


 
arhis   (2005-02-17 11:57) [14]

Ермак ©   (16.02.05 19:17) [11]

Ну что ж, вы честно всех предупредили, что связываться с вашей кафедрой опасно.
Спасибо за честность.



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

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

Наверх




Память: 0.52 MB
Время: 0.057 c
1-1108747618
Kolan
2005-02-18 20:26
2005.03.06
Внешний вид формы при изменении шрифта Windows.


1-1109073355
han-bratan
2005-02-22 14:55
2005.03.06
TListView - позиционирование на выбранный Item


6-1104329490
Zloy
2004-12-29 17:11
2005.03.06
Народ подскажите какой компонент для прокси сервера


3-1107333036
Oleg_
2005-02-02 11:30
2005.03.06
case ... when в запросе выдает ошибку


4-1106119358
Roman777
2005-01-19 10:22
2005.03.06
Определение Caption окна?