Threads Delphi — среда быстрой разработки, где в качестве языка программирования используется Object Pascal. На сегодняшний день позволяет разрабатывать ПО для Microsoft Windows, Mac OS, iOS и Android и входит в состав Embarcadero RAD Studio https://delphi-hlp.ru/index.php/threads.feed 2022-09-13T04:33:57+07:00 Delphi help info@delphi-hlp.ru Joomla! - Open Source Content Management Как реализовать обработку информации одновременно несколькими потоками 2017-07-06T19:53:16+07:00 2017-07-06T19:53:16+07:00 https://delphi-hlp.ru/index.php/threads/kak-realizovat-obrabotku-informatsii-odnovremenno-neskolkimi-potokami.html Super User toto44@inbox.ru <h1>Как реализовать обработку информации одновременно несколькими потоками</h1> <p> </p> <p> </p> <p>Запускайте Delphi. Итак, наша программа будет представлять из себя форму с двумя edit'ами и кнопкой. Добавьте их на форму.</p> <p> </p> <p>При нажатии на кнопку будут осуществляться некоторые долгие вычисления. Если бы мы не использовали потоки, то, пока эти вычисления не закончатся, делать мы ничего бы не смогли. Надо было бы ждать. Но, так как потоки у нас будут, то во время долгих вычислений можно будет что-нибудь вводить во второй edit (он, собственно, только для этого и существует). В первый же edit наш поток будет выводить некоторые промежуточные результаты своей работы.</p> <p> </p> <p class="feed-readmore"><a target="_blank" href ="/index.php/threads/kak-realizovat-obrabotku-informatsii-odnovremenno-neskolkimi-potokami.html">Подробнее...</a></p> <h1>Как реализовать обработку информации одновременно несколькими потоками</h1> <p> </p> <p> </p> <p>Запускайте Delphi. Итак, наша программа будет представлять из себя форму с двумя edit'ами и кнопкой. Добавьте их на форму.</p> <p> </p> <p>При нажатии на кнопку будут осуществляться некоторые долгие вычисления. Если бы мы не использовали потоки, то, пока эти вычисления не закончатся, делать мы ничего бы не смогли. Надо было бы ждать. Но, так как потоки у нас будут, то во время долгих вычислений можно будет что-нибудь вводить во второй edit (он, собственно, только для этого и существует). В первый же edit наш поток будет выводить некоторые промежуточные результаты своей работы.</p> <p> </p> <p class="feed-readmore"><a target="_blank" href ="/index.php/threads/kak-realizovat-obrabotku-informatsii-odnovremenno-neskolkimi-potokami.html">Подробнее...</a></p> Как создавать потоки без класса TThread? 2017-07-06T19:49:22+07:00 2017-07-06T19:49:22+07:00 https://delphi-hlp.ru/index.php/threads/kak-sozdavat-potoki-bez-klassa-tthread.html Super User toto44@inbox.ru <h1> Как создавать потоки без класса TThread?</h1> <p> </p> <p>Примечание от Jin X</p> <p>Программа не работает. Запускаю, жму Button1, счётчик покрутится полсекунды и всё. Кстати, у procedure incedit1; stdcall; не должно быть параметра типа pointer? Но даже и с ним не пашет. А вот если после i := i + 1; поставить Sleep(10), то будет работать. Вот только не понятно почему. Может, из-за того, что нет синхронизации?</p> <p>Ниже приведено две таблицы кода.</p> <p class="feed-readmore"><a target="_blank" href ="/index.php/threads/kak-sozdavat-potoki-bez-klassa-tthread.html">Подробнее...</a></p> <h1> Как создавать потоки без класса TThread?</h1> <p> </p> <p>Примечание от Jin X</p> <p>Программа не работает. Запускаю, жму Button1, счётчик покрутится полсекунды и всё. Кстати, у procedure incedit1; stdcall; не должно быть параметра типа pointer? Но даже и с ним не пашет. А вот если после i := i + 1; поставить Sleep(10), то будет работать. Вот только не понятно почему. Может, из-за того, что нет синхронизации?</p> <p>Ниже приведено две таблицы кода.</p> <p class="feed-readmore"><a target="_blank" href ="/index.php/threads/kak-sozdavat-potoki-bez-klassa-tthread.html">Подробнее...</a></p> Помещение формы в поток 2017-07-06T20:23:13+07:00 2017-07-06T20:23:13+07:00 https://delphi-hlp.ru/index.php/threads/pomeshchenie-formy-v-potok.html Super User toto44@inbox.ru <h1>Помещение формы в поток</h1> <p> </p> <p>Delphi имеет в своем распоряжении классную функцию, позволяющую сделать это:</p> <div> <table style="background-color: #ffffc4;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td> <p>Code:</p> </td> </tr> <tr align="left"> <td> <p class="p_CodeExample"><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> WriteComponentResFile(</span><span class="f_CodeExample">const</span><span class="f_CodeExample"> FileName: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">Instance: TComponent);</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p>Просто заполните имя файла, в котором вы хотите сохранить компонент, и читайте его затем следующей функцией:</p> <div> <table style="background-color: #ffffc4;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td> <p>Code:</p> </td> </tr> <tr align="left"> <td> <p class="p_CodeExample"><span class="f_CodeExample">function</span><span class="f_CodeExample"> ReadComponentResFile(</span><span class="f_CodeExample">const</span><span class="f_CodeExample"> FileName: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">Instance: TComponent): TComponent;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <h1>Помещение формы в поток</h1> <p> </p> <p>Delphi имеет в своем распоряжении классную функцию, позволяющую сделать это:</p> <div> <table style="background-color: #ffffc4;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td> <p>Code:</p> </td> </tr> <tr align="left"> <td> <p class="p_CodeExample"><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> WriteComponentResFile(</span><span class="f_CodeExample">const</span><span class="f_CodeExample"> FileName: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">Instance: TComponent);</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <p>Просто заполните имя файла, в котором вы хотите сохранить компонент, и читайте его затем следующей функцией:</p> <div> <table style="background-color: #ffffc4;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td> <p>Code:</p> </td> </tr> <tr align="left"> <td> <p class="p_CodeExample"><span class="f_CodeExample">function</span><span class="f_CodeExample"> ReadComponentResFile(</span><span class="f_CodeExample">const</span><span class="f_CodeExample"> FileName: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">Instance: TComponent): TComponent;</span></p> </td> </tr> </tbody> </table> </div> <p> </p> Поток с доступом к глобальной переменной основной программы 2017-07-06T20:28:55+07:00 2017-07-06T20:28:55+07:00 https://delphi-hlp.ru/index.php/threads/potok-s-dostupom-k-globalnoj-peremennoj-osnovnoj-programmy.html Super User toto44@inbox.ru <h1>Поток с доступом к глобальной переменной основной программы</h1> <p> </p> <p>Автор: Xavier Pacheco</p> <p> </p> <div> <table style="background-color: #ffffc4;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td> <p>Code:</p> </td> </tr> <tr align="left"> <td> <p class="p_CodeExample"><span class="f_CodeExample">unit</span><span class="f_CodeExample"> Main;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">interface</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">uses</span></p> <p class="p_CodeExample"><span class="f_CodeExample">Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,</span></p> <p class="p_CodeExample"><span class="f_CodeExample">StdCtrls;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample">TMainForm = </span><span class="f_CodeExample">class</span><span class="f_CodeExample">(TForm)</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  Button1: TButton;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  </span><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> Button1Click(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  </span><span class="f_CodeExample">{ Private declarations }</span></p> <p class="p_CodeExample"><span class="f_CodeExample">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  </span><span class="f_CodeExample">{ Public declarations }</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample">MainForm: TMainForm;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">implementation</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">{$R *.DFM}</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">{ NOTE: Change GlobalStr from var to threadvar to see difference }</span></p> <p class="p_CodeExample"><span class="f_CodeExample">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample">//threadvar</span></p> <p class="p_CodeExample"><span class="f_CodeExample">GlobalStr: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample">TTLSThread = </span><span class="f_CodeExample">class</span><span class="f_CodeExample">(TThread)</span></p> <p class="p_CodeExample"><span class="f_CodeExample">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  FNewStr: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">protected</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  </span><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> Execute; </span><span class="f_CodeExample">override</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  </span><span class="f_CodeExample">constructor</span><span class="f_CodeExample"> Create(</span><span class="f_CodeExample">const</span><span class="f_CodeExample"> ANewStr: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> SetShowStr(</span><span class="f_CodeExample">const</span><span class="f_CodeExample"> S: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample">if</span><span class="f_CodeExample"> S = </span><span class="f_CodeExample">''</span><span class="f_CodeExample"> </span><span class="f_CodeExample">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  MessageBox(</span><span class="f_CodeExample">0</span><span class="f_CodeExample">, PChar(GlobalStr), </span><span class="f_CodeExample">'The string is...'</span><span class="f_CodeExample">, MB_OK)</span></p> <p class="p_CodeExample"><span class="f_CodeExample">else</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  GlobalStr := S;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">constructor</span><span class="f_CodeExample"> TTLSThread.Create(</span><span class="f_CodeExample">const</span><span class="f_CodeExample"> ANewStr: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample">FNewStr := ANewStr;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">inherited</span><span class="f_CodeExample"> Create(False);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> TTLSThread.Execute;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample">FreeOnTerminate := True;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">SetShowStr(FNewStr);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">SetShowStr(</span><span class="f_CodeExample">''</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> TMainForm.Button1Click(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample">SetShowStr(</span><span class="f_CodeExample">'Hello world'</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">SetShowStr(</span><span class="f_CodeExample">''</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">TTLSThread.Create(</span><span class="f_CodeExample">'Dilbert'</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">Sleep(</span><span class="f_CodeExample">100</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">SetShowStr(</span><span class="f_CodeExample">''</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> <h1>Поток с доступом к глобальной переменной основной программы</h1> <p> </p> <p>Автор: Xavier Pacheco</p> <p> </p> <div> <table style="background-color: #ffffc4;" border="1" cellspacing="0" cellpadding="5" bgcolor="#ffffc4"> <tbody> <tr align="left" valign="top"> <td> <p>Code:</p> </td> </tr> <tr align="left"> <td> <p class="p_CodeExample"><span class="f_CodeExample">unit</span><span class="f_CodeExample"> Main;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">interface</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">uses</span></p> <p class="p_CodeExample"><span class="f_CodeExample">Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,</span></p> <p class="p_CodeExample"><span class="f_CodeExample">StdCtrls;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample">TMainForm = </span><span class="f_CodeExample">class</span><span class="f_CodeExample">(TForm)</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  Button1: TButton;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  </span><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> Button1Click(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  </span><span class="f_CodeExample">{ Private declarations }</span></p> <p class="p_CodeExample"><span class="f_CodeExample">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  </span><span class="f_CodeExample">{ Public declarations }</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample">MainForm: TMainForm;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">implementation</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">{$R *.DFM}</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">{ NOTE: Change GlobalStr from var to threadvar to see difference }</span></p> <p class="p_CodeExample"><span class="f_CodeExample">var</span></p> <p class="p_CodeExample"><span class="f_CodeExample">//threadvar</span></p> <p class="p_CodeExample"><span class="f_CodeExample">GlobalStr: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">type</span></p> <p class="p_CodeExample"><span class="f_CodeExample">TTLSThread = </span><span class="f_CodeExample">class</span><span class="f_CodeExample">(TThread)</span></p> <p class="p_CodeExample"><span class="f_CodeExample">private</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  FNewStr: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">protected</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  </span><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> Execute; </span><span class="f_CodeExample">override</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">public</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  </span><span class="f_CodeExample">constructor</span><span class="f_CodeExample"> Create(</span><span class="f_CodeExample">const</span><span class="f_CodeExample"> ANewStr: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> SetShowStr(</span><span class="f_CodeExample">const</span><span class="f_CodeExample"> S: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample">if</span><span class="f_CodeExample"> S = </span><span class="f_CodeExample">''</span><span class="f_CodeExample"> </span><span class="f_CodeExample">then</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  MessageBox(</span><span class="f_CodeExample">0</span><span class="f_CodeExample">, PChar(GlobalStr), </span><span class="f_CodeExample">'The string is...'</span><span class="f_CodeExample">, MB_OK)</span></p> <p class="p_CodeExample"><span class="f_CodeExample">else</span></p> <p class="p_CodeExample"><span class="f_CodeExample">  GlobalStr := S;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">constructor</span><span class="f_CodeExample"> TTLSThread.Create(</span><span class="f_CodeExample">const</span><span class="f_CodeExample"> ANewStr: </span><span class="f_CodeExample">string</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample">FNewStr := ANewStr;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">inherited</span><span class="f_CodeExample"> Create(False);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> TTLSThread.Execute;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample">FreeOnTerminate := True;</span></p> <p class="p_CodeExample"><span class="f_CodeExample">SetShowStr(FNewStr);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">SetShowStr(</span><span class="f_CodeExample">''</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">procedure</span><span class="f_CodeExample"> TMainForm.Button1Click(Sender: TObject);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">begin</span></p> <p class="p_CodeExample"><span class="f_CodeExample">SetShowStr(</span><span class="f_CodeExample">'Hello world'</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">SetShowStr(</span><span class="f_CodeExample">''</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">TTLSThread.Create(</span><span class="f_CodeExample">'Dilbert'</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">Sleep(</span><span class="f_CodeExample">100</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">SetShowStr(</span><span class="f_CodeExample">''</span><span class="f_CodeExample">);</span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">;</span></p> <p class="p_CodeExample"><span class="f_CodeExample"> </span></p> <p class="p_CodeExample"><span class="f_CodeExample">end</span><span class="f_CodeExample">.</span></p> </td> </tr> </tbody> </table> </div> <p> </p> Потоки и DLL 2017-07-06T19:44:32+07:00 2017-07-06T19:44:32+07:00 https://delphi-hlp.ru/index.php/threads/potoki-i-dll.html Super User toto44@inbox.ru <h1>Потоки и DLL</h1> <p>  </p> <p>Приведенный ниже текст подразумевает, что вы обладаете базовыми знаниями о принципе работы потоков и умеете создавать DLL.</p> <p> Техническая сторона вопроса будет сфокусирована на потоках и функции DllEntryPoint. Функция DllEntryPoint не должна объявляться в ваших Delphi DLL. Фактически, большую часть, если не всю, Delphi DLL будет правильно работать и без вашего явного объявления DllEntryPoint. Тем не менее, я включил данный совет для тех Win32-программистов, которые понимают эту функцию и хотят связать с ней свое функциональное назначение, чтобы оно являлось частью DLL. Чтобы быть более конкрентым, это будет интересно тем программистам, которые хотят вызывать одну и ту же DLL из многочисленных потоков одной программы.</p> <p class="feed-readmore"><a target="_blank" href ="/index.php/threads/potoki-i-dll.html">Подробнее...</a></p> <h1>Потоки и DLL</h1> <p>  </p> <p>Приведенный ниже текст подразумевает, что вы обладаете базовыми знаниями о принципе работы потоков и умеете создавать DLL.</p> <p> Техническая сторона вопроса будет сфокусирована на потоках и функции DllEntryPoint. Функция DllEntryPoint не должна объявляться в ваших Delphi DLL. Фактически, большую часть, если не всю, Delphi DLL будет правильно работать и без вашего явного объявления DllEntryPoint. Тем не менее, я включил данный совет для тех Win32-программистов, которые понимают эту функцию и хотят связать с ней свое функциональное назначение, чтобы оно являлось частью DLL. Чтобы быть более конкрентым, это будет интересно тем программистам, которые хотят вызывать одну и ту же DLL из многочисленных потоков одной программы.</p> <p class="feed-readmore"><a target="_blank" href ="/index.php/threads/potoki-i-dll.html">Подробнее...</a></p>