﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Программирование / Delphi  / Ошибка EOSErros / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Mon, 08 Sep 2008 16:38:04 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Ошибка EOSErros</title><link>http://relib.com/forums/Topic912907-8-1.aspx</link><description>[quote][b]blaze (07.05.2007)[/b][hr]А вопрос вот в чем. Как я понял, поток будет выполнять процедуру, описанную в Execute. Т.е. если мне нужно выполнять разные процедуры через поток, то необходимо создать условие в Execute, чтобы он выполнил нужную процедуру? Можно как-нибудь напрямую вызывать нужную процедуру в потоке чтобы обойти условия?[/quote]&lt;/P&gt;&lt;P&gt;В этом случае лучше несколько разных классов наследников от TThread создать. Или пользуйся функцией VCL BeginThread.&lt;/P&gt;&lt;P&gt;[quote][b]blaze (07.05.2007)[/b][hr]&lt;SPAN id=ctl03_ctlTopic_ctlPanelBar_ctlTopicsRepeater_ctl13_lblFullMessage&gt;И еще возник вопрос.. У меня на форме лежит компонент TIdHTTP и я через поток с ним работаю. И во время запросов, не смотря на то, что они выполняются в отденом потоке, форма зависает на время выполнения, например функции Get в TIdHTTP.. Это имеено следствие того, что синронизируется поток при обращении к TIdHTTP, или в чем-то другом скорее всего ошибка?&lt;/SPAN&gt;[/quote]&lt;/P&gt;&lt;P&gt;Не знаю. Возможно компонент не рассчитан на многопотоковую работу, кто его знает.</description><pubDate>Wed, 09 May 2007 13:25:32 GMT</pubDate><dc:creator>bazile</dc:creator></item><item><title>RE: Ошибка EOSErros</title><link>http://relib.com/forums/Topic912907-8-1.aspx</link><description>И еще возник вопрос.. У меня на форме лежит компонент TIdHTTP и я через поток с ним работаю. И во время запросов, не смотря на то, что они выполняются в отденом потоке, форма зависает на время выполнения, например функции Get в TIdHTTP.. Это имеено следствие того, что синронизируется поток при обращении к TIdHTTP, или в чем-то другом скорее всего ошибка?&lt;br&gt;&lt;br&gt; Если это следствие того, что синронизируется поток при обращении к TIdHTTP, то как-то тогда надо TIdHTTP запихать в класс fThread Что я и попробовал - добавил&lt;br&gt; fIdHTTP: TIdHTTP;..&lt;br&gt;&lt;br&gt; И в &lt;процедура&gt; добавил fIdHTTP.Create; и уже после этого пытался выполнить fIdHTTP.Get(...).. Но ничего не вышло, не нравится что-то дебагеру тут.</description><pubDate>Mon, 07 May 2007 01:00:33 GMT</pubDate><dc:creator>blaze</dc:creator></item><item><title>RE: Ошибка EOSErros</title><link>http://relib.com/forums/Topic912907-8-1.aspx</link><description>Что-то я не очень понял одну вещь..&lt;br&gt;&lt;br&gt; ...&lt;br&gt; type&lt;br&gt;  fThread = class(TThread)&lt;br&gt;  private&lt;br&gt;    { Private declarations }&lt;br&gt;    procedure &lt;Процедура&gt;;&lt;br&gt;  protected&lt;br&gt;    { Protected declarations }&lt;br&gt;    procedure Execute; override;&lt;br&gt;  end;&lt;br&gt;&lt;br&gt;  ...&lt;br&gt;&lt;br&gt;procedure fThread.Execute;&lt;br&gt;begin&lt;br&gt;   Synchronize(&lt;Процедура&gt;);&lt;br&gt;end;&lt;br&gt;&lt;br&gt;procedure fThread.&lt;Процедура&gt;;&lt;br&gt;begin&lt;br&gt;...&lt;br&gt;end;&lt;br&gt;&lt;br&gt;procedure TForm1.ButtonClick(Sender: TObject);&lt;br&gt;begin&lt;br&gt;   fThread.Create(False);&lt;br&gt;end;&lt;br&gt;...&lt;br&gt;&lt;br&gt; Т.е. по нажатию на кнопку, должен запуститься поток. А вопрос вот в чем. Как я понял, поток будет выполнять процедуру, описанную в Execute. Т.е. если мне нужно выполнять разные процедуры через поток, то необходимо создать условие в Execute, чтобы он выполнил нужную процедуру? Можно как-нибудь напрямую вызывать нужную процедуру в потоке чтобы обойти условия?</description><pubDate>Mon, 07 May 2007 00:31:26 GMT</pubDate><dc:creator>blaze</dc:creator></item><item><title>RE: Ошибка EOSErros</title><link>http://relib.com/forums/Topic912907-8-1.aspx</link><description>blaze, открой, пожалуйста, документацию. Там все есть.</description><pubDate>Sun, 06 May 2007 12:53:43 GMT</pubDate><dc:creator>bazile</dc:creator></item><item><title>RE: Ошибка EOSErros</title><link>http://relib.com/forums/Topic912907-8-1.aspx</link><description>А ты мог бы написать какой-нибудь простенький пример работы с TThread..? Чтобы, например, по нажатию на кнопку выполнялась какая-нибудь процедура.</description><pubDate>Sat, 05 May 2007 19:28:33 GMT</pubDate><dc:creator>blaze</dc:creator></item><item><title>RE: Ошибка EOSErros</title><link>http://relib.com/forums/Topic912907-8-1.aspx</link><description>Хорошая мысль. Я и не обратил внимание что ты WinAPI функцию CreateThread вызываешь. Работая в Delphi лучше всего использовать ее родные классы/методы, обращаясь к WinAPI только при реальной необходимости.&lt;/P&gt;&lt;P&gt;Разница между CreateThread, BeginThread и классом TThread конечно же есть. CreateThread это функция WinAPI которая ничего не знает о VCL. В то же время BeginThread и TThread являются родными средствами VCL и делают дополнительную работу. Подробности смотри в документации. Я бы на твоем месте создал наследника от TThread.</description><pubDate>Sat, 05 May 2007 12:36:21 GMT</pubDate><dc:creator>bazile</dc:creator></item><item><title>RE: Ошибка EOSErros</title><link>http://relib.com/forums/Topic912907-8-1.aspx</link><description>Странно, но все равно не хочет работать Synchronize.. А что если через TThread сделать тоже самое? Вообще есть ли разница между CreateThread, BeginThread и классом TThread.</description><pubDate>Sat, 05 May 2007 12:00:11 GMT</pubDate><dc:creator>blaze</dc:creator></item><item><title>RE: Ошибка EOSErros</title><link>http://relib.com/forums/Topic912907-8-1.aspx</link><description>В Synchronize надо передавать только имя метода. Параметры придется передавать как-то по другому. Например, через private поля класса.</description><pubDate>Fri, 04 May 2007 10:04:58 GMT</pubDate><dc:creator>bazile</dc:creator></item><item><title>RE: Ошибка EOSErros</title><link>http://relib.com/forums/Topic912907-8-1.aspx</link><description>Я тоже думал, что Synchronize спасет.. Но почему-то он не хочет работать..&lt;br&gt;&lt;br&gt; Создал новую процедуру procedure set_ProgressBar(Visible: Boolean; Possition: Integer), куда передаю нужные параметры.. А в функции, которую выполняет поток добавил Synchronize(set_ProgressBar(True, 20)), на что Delphi говорит "Missing operator or semicolon"..</description><pubDate>Fri, 04 May 2007 09:21:56 GMT</pubDate><dc:creator>blaze</dc:creator></item><item><title>RE: Ошибка EOSErros</title><link>http://relib.com/forums/Topic912907-8-1.aspx</link><description>Попробуй вынести изменение свойств ProgressBar в отдельный метод и вызывай его через Synchronize.</description><pubDate>Thu, 03 May 2007 11:35:36 GMT</pubDate><dc:creator>bazile</dc:creator></item></channel></rss>