Текущий архив: 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