<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673394</guid>
        <pubDate>Sat, 11 Jun 2016 11:23:12 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673394</link>
        <description><![CDATA[PIKACHU: В том то и дело что конект не закрывается, так как если начать ещё раз отправлять то опять же уходит часть без хвоста и всегда по разному в одной сессии]]></description>
        <author>PIKACHU</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673383</guid>
        <pubDate>Fri, 10 Jun 2016 21:18:05 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673383</link>
        <description><![CDATA[Mr.Delphist: Скорее всего, кто-то схлопывает коннект раньше времени (главный поток?), поэтому и получается, что по F8 всё ОК, а при работе обычный путём - хвост недопосылается.]]></description>
        <author>Mr.Delphist</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673292</guid>
        <pubDate>Fri, 10 Jun 2016 04:05:31 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673292</link>
        <description><![CDATA[PIKACHU: хвоста не хватает, причем всегда по разному. Есть мысль создать поток в нем и проводить все операции с данными, а в нем уже создать поток который будет передавать стримы, еще была идея внутри потока организовать экземпляр класса client соединятся с сервером и отправлять стримы. Как лучше.]]></description>
        <author>PIKACHU</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673286</guid>
        <pubDate>Thu, 09 Jun 2016 21:23:29 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673286</link>
        <description><![CDATA[Mr.Delphist: Для начала - убрать всю работу с отображением прогресса (это плюшки, их можно сделать позже, через PostMessage). <br><br>Затем: всю логику по созданию объектов данных (типа TMemoryStream и т.п.) убрать из конструктора в метод Execute, т.к. Create работает в контексте потока-создателя (обычно - визуальный поток), а вот сам Execute - это именно новый поток.<br><br>Далее: что значит &quot;данные приходят не все&quot;. Не хватает хвоста данных? Или в середине есть битые куски?]]></description>
        <author>Mr.Delphist</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673190</guid>
        <pubDate>Thu, 09 Jun 2016 03:37:01 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673190</link>
        <description><![CDATA[PIKACHU: Да я в курсе что при Synchronize основной поток не доступен, с потоками не очень силен может что то посоветуете. Писал 2 потока первый получает данные второй  записывает и все равно без Synchronize не обошлось данные приходят не все, хотя по Ф8 все приходит.]]></description>
        <author>PIKACHU</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673153</guid>
        <pubDate>Wed, 08 Jun 2016 18:43:13 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673153</link>
        <description><![CDATA[Mr.Delphist: Однопоточный в том смысле, что в один момент времени работает только ОДИН поток. Даже если в машине десятиядерник из новых экстремальных серий от Intel. Поэтому комбинация TThread + Synchronize однозначно вызывает тот самый вопрос: А смысл тут делать несколько потоков?]]></description>
        <author>Mr.Delphist</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673151</guid>
        <pubDate>Wed, 08 Jun 2016 18:04:22 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3673151</link>
        <description><![CDATA[PIKACHU: А смысл тут делать несколько потоков?]]></description>
        <author>PIKACHU</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3672874</guid>
        <pubDate>Sun, 05 Jun 2016 22:24:19 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3672874</link>
        <description><![CDATA[Mr.Delphist: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=408927&view=findpost&p=3672788'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>PIKACHU &#064; <time class="tag-quote__quoted-time" datetime="2016-06-03T17:57:11+00:00">03.06.16, 17:57</time></span><div class='quote '>Если будут какие нибудь замечания выслушаю. </div></div><br>
Главное замечание: это однопоточный код (гляньте справку на Synchronize и за счёт чего это дело работает).]]></description>
        <author>Mr.Delphist</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3672788</guid>
        <pubDate>Fri, 03 Jun 2016 17:57:11 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3672788</link>
        <description><![CDATA[PIKACHU: Разобрался, гиглвый файл уходит.<br>
переменные выводим в основной поток<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">constructor TMYT.Create(id: integer);</div><div class="code_line">begin</div><div class="code_line">inherited create(true);</div><div class="code_line">FreeOnTerminate := true;</div><div class="code_line">indexF:=id;</div><div class="code_line">WriteBlock := 0;</div><div class="code_line">&nbsp;&nbsp;lastEndPosition:=0;</div><div class="code_line">&nbsp;&nbsp;WriteBlockIn:=1;</div><div class="code_line">&nbsp;&nbsp;Sleep(50);</div><div class="code_line">&nbsp;&nbsp;GeneralForm.ClientSettings.max_buffer_size := 65000;</div><div class="code_line">&nbsp;&nbsp;fs:=TFileStream.Create(&#39;1.txt&#39;,fmOpenRead);</div><div class="code_line">&nbsp;&nbsp;FullBufferSize := FS.Size;</div><div class="code_line">&nbsp;&nbsp;CountSection := (FullBufferSize div GeneralForm.ClientSettings.max_buffer_size)+1;</div><div class="code_line">&nbsp;&nbsp;GUID := Client.ClientModule.ServerMethodsClient.AddNewFileTransfer(FullBufferSize);</div><div class="code_line">&nbsp;&nbsp;EventsForm.EventItem[indexF].ProgressBar.Max := CountSection;</div><div class="code_line">&nbsp;&nbsp;MS := TMemoryStream.Create;</div><div class="code_line">&nbsp;&nbsp;BufferSize := GeneralForm.ClientSettings.max_buffer_size;</div><div class="code_line">&nbsp;&nbsp;BB := 0;</div><div class="code_line">&nbsp;&nbsp;Resume;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMYT.DoWork;</div><div class="code_line">label m1;</div><div class="code_line">begin</div><div class="code_line">try</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (FullBufferSize&#60;=0) then exit;</div><div class="code_line">&nbsp;&nbsp; &nbsp;m1:</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;EventsForm.EventItem[indexF].ProgressPosition := BB;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if FullBufferSize&#60;BufferSize then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;BufferSize := FullBufferSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Buffer := nil;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SetLength(Buffer, BufferSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FS.Position := lastEndPosition;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FS.ReadBuffer(Buffer, BufferSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MS.Clear;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MS.WriteBuffer(Buffer, BufferSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MS.Position := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if Client.ClientModule.ServerMethodsClient.WriteFileOnServer(MS,GUID,BufferSize) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;lastEndPosition := FS.Position</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;goto m1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FullBufferSize:=FullBufferSize - GeneralForm.ClientSettings.max_buffer_size;</div><div class="code_line">&nbsp;&nbsp; &nbsp;inc(BB);</div><div class="code_line">&nbsp;&nbsp;if (FullBufferSize&#60;=0) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;client.ClientModule.ServerMethodsClient.SetEndFile(GUID);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Terminate;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MS.Free;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FS.Free;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">except</div><div class="code_line">end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TMYT.Execute;</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;inherited;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while not Terminated do</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Sleep(10);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Synchronize(DoWork);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Если будут какие нибудь замечания выслушаю.]]></description>
        <author>PIKACHU</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3672770</guid>
        <pubDate>Fri, 03 Jun 2016 14:54:56 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3672770</link>
        <description><![CDATA[PIKACHU: может через ProcessMessages сделать и не парица?]]></description>
        <author>PIKACHU</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3672700</guid>
        <pubDate>Fri, 03 Jun 2016 08:56:13 +0000</pubDate>
        <title>Datasnap и Thread</title>
        <link>https://forum.sources.ru/index.php?showtopic=408927&amp;view=findpost&amp;p=3672700</link>
        <description><![CDATA[PIKACHU: Здравствуйте. Есть код который отправляет файл на сервер по частям, а сервер его собирает все работает как надо. Но если этот код засунуть в поток то он отправляет не весь файл, подозреваю что поток посылает данные быстрее чем сервер их может обработать. Есть ли мысль по этому поводу или как организовать синхронизацию с классом. <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;FS:TFileStream;</div><div class="code_line">&nbsp;&nbsp;MS:TMemoryStream;</div><div class="code_line">&nbsp;&nbsp;Buffer:TBytes;</div><div class="code_line">&nbsp;&nbsp;GUID:string;</div><div class="code_line">&nbsp;&nbsp;CountSection:int64;</div><div class="code_line">&nbsp;&nbsp;FullBufferSize:int64;</div><div class="code_line">&nbsp;&nbsp;BufferSize:int64;</div><div class="code_line">&nbsp;&nbsp;I:Integer;</div><div class="code_line">begin</div><div class="code_line">try</div><div class="code_line">&nbsp;&nbsp;fs:=TFileStream.Create(&#39;1.txt&#39;,fmOpenRead);</div><div class="code_line">&nbsp;&nbsp;FullBufferSize := FS.Size;</div><div class="code_line">&nbsp;&nbsp;CountSection := (FullBufferSize div GeneralForm.ClientSettings.max_buffer_size)+1;</div><div class="code_line">&nbsp;&nbsp;GUID := Client.ClientModule.ServerMethodsClient.AddNewFileTransfer(FullBufferSize);//&#60;-Создаем кэш на сервере </div><div class="code_line">&nbsp;&nbsp;MS := TMemoryStream.Create;</div><div class="code_line">&nbsp;&nbsp;BufferSize := GeneralForm.ClientSettings.max_buffer_size;//&#60;-максимальные размер буфера </div><div class="code_line">&nbsp;&nbsp;for I := 0 to CountSection do</div><div class="code_line">&nbsp;&nbsp; &nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if FullBufferSize&#60;=0 then Break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if FullBufferSize&#60;BufferSize then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;BufferSize := FullBufferSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Buffer := nil;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;SetLength(Buffer, BufferSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FS.ReadBuffer(Buffer, BufferSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MS.Clear;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MS.WriteBuffer(Buffer, BufferSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;MS.Position := 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Client.ClientModule.ServerMethodsClient.WriteFileOnServer(MS,GUID,BufferSize);//&#60;-отправка буфера</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;FullBufferSize:=FullBufferSize - GeneralForm.ClientSettings.max_buffer_size;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;client.ClientModule.ServerMethodsClient.SetEndFile(GUID);//говорим серверу что файл закончен</div><div class="code_line">&nbsp;&nbsp;MS.Destroy;</div><div class="code_line">&nbsp;&nbsp;FS.Destroy;</div></ol></div></div></div></div>]]></description>
        <author>PIKACHU</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	