<?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=208393&amp;view=findpost&amp;p=1748839</guid>
        <pubDate>Thu, 01 Nov 2007 08:19:21 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748839</link>
        <description><![CDATA[Rose: В общем, как и обещал, реализация второго пункта без Resume/Suspend, а прямо на лету :) На этот раз даже с проверками на ошибки. &quot;Полезные&quot; здесь функции IsThreadSuspended и GetThreadIdByHandle, остальные - просто рабочие.<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">uses SysConst, JwaNative, JwaWinType, JwaNtStatus;</div><div class="code_line">&nbsp;</div><div class="code_line">function NtErrorMessage(Code: NTSTATUS): String;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;hMod: Cardinal;</div><div class="code_line">&nbsp;&nbsp;Buffer: array[0..255] of Char;</div><div class="code_line">&nbsp;&nbsp;Len: Integer;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;hMod:=GetModuleHandle(ntdll);</div><div class="code_line">&nbsp;&nbsp;Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS or</div><div class="code_line">&nbsp;&nbsp; &nbsp;FORMAT_MESSAGE_ARGUMENT_ARRAY or FORMAT_MESSAGE_FROM_HMODULE, Pointer(hMod), Code, 0, Buffer,</div><div class="code_line">&nbsp;&nbsp; &nbsp;SizeOf(Buffer), nil);</div><div class="code_line">&nbsp;&nbsp;while (Len &#62; 0) and (Buffer[Len - 1] in [#0..#32, &#39;.&#39;]) do Dec(Len);</div><div class="code_line">&nbsp;&nbsp;SetString(Result, Buffer, Len);</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function NtSuccess(Code: NTSTATUS): Boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result:=Code &#62;= 0;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure NtCheck(Code: NTSTATUS);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;if not NtSuccess(Code) then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;raise EOSError.CreateResFmt(@SOSError, [Code,NtErrorMessage(Code)]);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function GetSystemInfoTable(ASystemInformationClass: SYSTEM_INFORMATION_CLASS;</div><div class="code_line">&nbsp;&nbsp;out Info: Pointer; out Size: Cardinal): NTSTATUS;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;SystemInfo: TSystemInfo;</div><div class="code_line">&nbsp;&nbsp;ReturnSize: Cardinal;</div><div class="code_line">&nbsp;&nbsp;ContinueFlag: Boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;GetSystemInfo(SystemInfo);</div><div class="code_line">&nbsp;&nbsp;Size:=SystemInfo.dwPageSize;</div><div class="code_line">&nbsp;&nbsp;repeat</div><div class="code_line">&nbsp;&nbsp; &nbsp;Info:=VirtualAlloc(nil,Size,MEM_COMMIT or MEM_RESERVE,PAGE_READWRITE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if Info = nil then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;RaiseLastOSError;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result:=NtQuerySystemInformation(ASystemInformationClass,Info,Size,@ReturnSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp;ContinueFlag:=Result = STATUS_INFO_LENGTH_MISMATCH;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ContinueFlag then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Win32Check(VirtualFree(Info,0,MEM_RELEASE));</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if ReturnSize = 0 then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Size:=Size + SystemInfo.dwPageSize</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Size:=ReturnSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;until not ContinueFlag;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function GetThreadIdByHandle(Handle: THandle): Cardinal;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Info: _THREAD_BASIC_INFORMATION;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;NtCheck(NtQueryInformationThread(Handle,ThreadBasicInformation,@Info,</div><div class="code_line">&nbsp;&nbsp; &nbsp;SizeOf(_THREAD_BASIC_INFORMATION),nil));</div><div class="code_line">&nbsp;&nbsp;Result:=Info.ClientId.UniqueThread;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function IsThreadSuspended(ThreadID: Cardinal): Boolean;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Info, Entry: Pointer;</div><div class="code_line">&nbsp;&nbsp;Size, i: Cardinal;</div><div class="code_line">&nbsp;&nbsp;ContinueFlag: Boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result:=false;</div><div class="code_line">&nbsp;&nbsp;NtCheck(GetSystemInfoTable(SystemProcessesAndThreadsInformation,Info,Size));</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;Entry:=Info;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ContinueFlag:=true;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while ContinueFlag do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;for i:=0 to PSYSTEM_PROCESSES(Entry)^.ThreadCount - 1 do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if PSYSTEM_PROCESSES(Entry)^.Threads[i].ClientId.UniqueThread = ThreadID</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Result:=PSYSTEM_PROCESSES(Entry)^.Threads[i].WaitReason = Suspended;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ContinueFlag:=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (PSYSTEM_PROCESSES(Entry)^.NextEntryDelta &#60;&#62; 0) then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Cardinal(Entry):=Cardinal(Entry) + PSYSTEM_PROCESSES(Entry)^.NextEntryDelta</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ContinueFlag:=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp;VirtualFree(Info,0,MEM_RELEASE);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>Rose</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748585</guid>
        <pubDate>Wed, 31 Oct 2007 22:17:37 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748585</link>
        <description><![CDATA[Rose: А разве я настаиваю - хозяин-барин  ;) Хотя аргументация мне нравится, получается, что если бы документация была, вы бы ее не изучали, так как <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>в нем еще нужно будет разобратся</div></div><br>
Windows.pas вы по этой же причине не используете? Сами импортируете? Лично мне использование этого сэкономило массу времени, так как ручками описывать все стандартные типы и импортировать функции - задача весьма утомительная...]]></description>
        <author>Rose</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748581</guid>
        <pubDate>Wed, 31 Oct 2007 22:13:03 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748581</link>
        <description><![CDATA[ViktorXP: Ну тогда это понижает шансы использовать ее в моих проэктах. С таким успехом я и сам могу модуль писнуть.<br>И сразу опережаю. Согласен с утверждением: &quot;Зачем писать если уже готовое есть&quot; . Но в нем еще нужно будет разобратся а если для ее разбора нужна будет MSDN.... зачем мне эти модули если я всеравно буду изучать MSDN.<br> <br>пс. тут решает каждый для себя сам что ему легче.]]></description>
        <author>ViktorXP</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748575</guid>
        <pubDate>Wed, 31 Oct 2007 22:05:47 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748575</link>
        <description><![CDATA[Rose: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>А к JEDI API хорошая докомунтация есть?</div></div><br>
<br>
Есть&#33; В MSDN  :D  Где и положено быть документации по WinAPI. Юниты из JEDI API - это грубо говоря большое расширение к Windows.pas. Разумеется, NativeAPI из моего примера недокументированы...]]></description>
        <author>Rose</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748572</guid>
        <pubDate>Wed, 31 Oct 2007 22:01:22 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748572</link>
        <description><![CDATA[ViktorXP: Да действительно в борланд не все апишки включены. А к JEDI API хорошая докомунтация есть?<br>
Обязательно как нить попробую. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2007-10-31T22:02:48+00:00">31.10.07, 22:02</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=208393&view=findpost&p=1748569'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rose &#064; <time class="tag-quote__quoted-time" datetime="2007-10-31T21:55:26+00:00">31.10.07, 21:55</time></span><div class='quote '>Даже стандартные юниты не используете? </div></div><br>
я имею ввиду под стороними - все то что от стороних разработчиков]]></description>
        <author>ViktorXP</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748569</guid>
        <pubDate>Wed, 31 Oct 2007 21:55:26 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748569</link>
        <description><![CDATA[Rose: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>В моих разработках очень мало сторонего.</div></div><br>
<br>
Хм :) Как сказать... Даже стандартные юниты не используете? <br>
<br>
JEDI API - это затыкание сообществом дыр со стороны Borland. Как известно, импорт далеко не всех АПИ (даже тех, которые нужны повседневно) в стандартных дельфийских юнитах содержаться, а в JEDI с этим куда лучше. Недавно, когда Джим Дуглас (генеральный директор CodeGear) в Россию приезжал, этот вопрос поднимался. Считаю, что такие задачи они должны решать сами, а не полагаться на сообщество. ИМХО.]]></description>
        <author>Rose</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748568</guid>
        <pubDate>Wed, 31 Oct 2007 21:49:08 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748568</link>
        <description><![CDATA[ViktorXP: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=208393&view=findpost&p=1748467'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rose &#064; <time class="tag-quote__quoted-time" datetime="2007-10-31T19:36:27+00:00">31.10.07, 19:36</time></span><div class='quote '>Это универсальный метод.</div></div><br>
Ну раз он много чего может тогда даю добро на его существование :D <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=208393&view=findpost&p=1748467'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rose &#064; <time class="tag-quote__quoted-time" datetime="2007-10-31T19:36:27+00:00">31.10.07, 19:36</time></span><div class='quote '>JEDI API достаточно популярная вещь.</div></div><br>
Слышал но ни когда не пользовался. В моих разработках очень мало сторонего.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=208393&view=findpost&p=1748467'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Rose &#064; <time class="tag-quote__quoted-time" datetime="2007-10-31T19:36:27+00:00">31.10.07, 19:36</time></span><div class='quote '>К тому же, десяток строчек - это куча кода?.. </div></div><br>
Если со стороны отладки: чем больше кода тем труднее в нем разобратся. А если учесть что это еще и не твое ...]]></description>
        <author>ViktorXP</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748467</guid>
        <pubDate>Wed, 31 Oct 2007 19:36:27 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748467</link>
        <description><![CDATA[Rose: <strong class='tag-b'>ViktorXP</strong><br>
<br>
Это универсальный метод. Позволяет по дескриптору узнать тип объекта вообще, а не проверить только на Thread. Если понадобится проверить на Process, File, Event, Port и т.д. - тот же самый код :) А насчет лишних модулей - так это же всего лишь заголовочные файлы с описанием типов и импортируемых функций. Как Windows.pas, к тому же, не такие уж и экзотичные... JEDI API достаточно популярная вещь.<br>
<br>
К тому же, десяток строчек - это куча кода?..]]></description>
        <author>Rose</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748463</guid>
        <pubDate>Wed, 31 Oct 2007 19:28:23 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748463</link>
        <description><![CDATA[ViktorXP: <strong class='tag-b'>Rose</strong> я канешно ничего не имею против других вариантов только зачем заменять одну апишку кучей кода  :huh: <br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray">я бы ничего не говорл если тамбы была всего одна большая процедура<br>
но цепляются еще два модуля<br>
но это только мое мнение и не все могут с ним согласится</span>]]></description>
        <author>ViktorXP</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748442</guid>
        <pubDate>Wed, 31 Oct 2007 19:14:18 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1748442</link>
        <description><![CDATA[Rose: 1. ИМХО, наиболее универсальный метод с помощью Native API (используются заголовки JEDI API - http://jedi-apilib.sourceforge.net/ ):<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">uses JwaNative, JwaNtStatus;</div><div class="code_line">&nbsp;</div><div class="code_line">// Упрощенно, без проверок на ошибки</div><div class="code_line">function GetObjectTypeName(Handle: THandle): String;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;Info: Pointer;</div><div class="code_line">&nbsp;&nbsp;BasicInfo: _OBJECT_BASIC_INFORMATION;</div><div class="code_line">&nbsp;&nbsp;Size: Cardinal;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;NtQueryObject(Handle,ObjectBasicInformation,@BasicInfo,SizeOf(_OBJECT_BASIC_INFORMATION),nil);</div><div class="code_line">&nbsp;&nbsp;GetMem(Info,BasicInfo.TypeInformationLength);</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;if NtQueryObject(Handle,ObjectTypeInformation,Info,BasicInfo.TypeInformationLength,@Size) =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;STATUS_INFO_LENGTH_MISMATCH</div><div class="code_line">&nbsp;&nbsp; &nbsp;then begin;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ReallocMem(Info,Size);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;NtQueryObject(Handle,ObjectTypeInformation,Info,Size,nil);</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Result:=WideCharToString(POBJECT_TYPE_INFORMATION(Info)^.Name.Buffer);</div><div class="code_line">&nbsp;&nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp;FreeMem(Info);</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">function IsThread(Handle: THandle): Boolean;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Result:=GetObjectTypeName(Handle) = &#39;Thread&#39;;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<br>
2. Есть у меня идейка тоже как это сделать, но что-то уж очень там наворочено, я лучше сначала проверю, если получится - отпишусь.]]></description>
        <author>Rose</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1747908</guid>
        <pubDate>Wed, 31 Oct 2007 11:40:35 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1747908</link>
        <description><![CDATA[ViktorXP: <strong class='tag-b'>DelphiLexx</strong> нет я ничего не перепутал.<br>
 <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=208393&view=findpost&p=1747807'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>DelphiLexx &#064; <time class="tag-quote__quoted-time" datetime="2007-10-31T10:29:45+00:00">31.10.07, 10:29</time></span><div class='quote '>И suspendthread не может вернуть -1 т.к. у него возвращаемый тип dword </div></div><br>
просто при ошибки он возвращает максимальное число :)<br>
а теперь отними от нуля 1 что получится :) <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2007-10-31T11:57:08+00:00">31.10.07, 11:57</time></span></span><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>If the function succeeds, the return value is the thread&#39;s previous suspend count; otherwise, it is (DWORD) -1. To get extended error information, use the GetLastError function.</div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2007-10-31T12:09:09+00:00">31.10.07, 12:09</time></span></span><br>
хотя <strong class='tag-b'>i</strong> нужно было объявить не как <strong class='tag-b'>integer</strong> а ка <strong class='tag-b'>DWORD</strong>]]></description>
        <author>ViktorXP</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1747807</guid>
        <pubDate>Wed, 31 Oct 2007 10:29:45 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1747807</link>
        <description><![CDATA[DelphiLexx: А вот здесь<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=208393&view=findpost&p=1747757'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ViktorXP &#064; <time class="tag-quote__quoted-time" datetime="2007-10-31T09:53:33+00:00">31.10.07, 09:53</time></span><div class='quote '>end;<br>
  resumethread(HT);<br>
  if i=0 then result:=true else result:=false;<br>
</div></div><br>
случайно не так:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=208393&view=findpost&p=1747757'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ViktorXP &#064; <time class="tag-quote__quoted-time" datetime="2007-10-31T09:53:33+00:00">31.10.07, 09:53</time></span><div class='quote '>end;<br>
  I := resumethread(HT);<br>
  if i=0 then result:=true else result:=false;<br>
</div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2007-10-31T10:38:00+00:00">31.10.07, 10:38</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=208393&view=findpost&p=1747757'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ViktorXP &#064; <time class="tag-quote__quoted-time" datetime="2007-10-31T09:53:33+00:00">31.10.07, 09:53</time></span><div class='quote '>i:=suspendthread(HT);</div></div><br>
И suspendthread не может вернуть -1 т.к. у него возвращаемый тип dword]]></description>
        <author>DelphiLexx</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1747757</guid>
        <pubDate>Wed, 31 Oct 2007 09:53:33 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1747757</link>
        <description><![CDATA[ViktorXP: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=208393&view=findpost&p=1747615'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>DelphiLexx &#064; <time class="tag-quote__quoted-time" datetime="2007-10-31T08:45:16+00:00">31.10.07, 08:45</time></span><div class='quote '>1) узнать по Handle существует ли в системе поток с этим Handle</div></div><br>
function GetExitCodeThread(hThread: THandle; var lpExitCode: DWORD): BOOL; stdcall; <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2007-10-31T10:09:06+00:00">31.10.07, 10:09</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=208393&view=findpost&p=1747615'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>DelphiLexx &#064; <time class="tag-quote__quoted-time" datetime="2007-10-31T08:45:16+00:00">31.10.07, 08:45</time></span><div class='quote '>2) узнать текущее состояние потока(suspended или resume) по его Handle с помощью API-функции. </div></div><br>
Вот оддельной Апишки я не видел но можно хитрым способом узнавать:<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">function StatThread(HT:Thandle):boolean;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;i:integer;</div><div class="code_line">bagin</div><div class="code_line">&nbsp;&nbsp;i:=suspendthread(HT);</div><div class="code_line">&nbsp;&nbsp;if i=-1 then</div><div class="code_line">&nbsp;&nbsp;begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;result:=false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;exit;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;&nbsp;resumethread(HT);</div><div class="code_line">&nbsp;&nbsp;if i=0 then result:=true else result:=false;</div><div class="code_line">end;</div></ol></div></div></div></div><br>
если поток не существует или он на паузе тогда возвратится лож если он запущен тогда истину.<br>
<br>
пс. все дело втом что когда с помощю функции suspendthread перевести поток в паузу то возврящается ноль если несколько раз так повторить то число увеличивается, получается что если поток стоит на паузе тогда возврат будет 1 если он выполняется тогда будет 0. но нужно не забыть вернут прежнее состояние если мы дважди поствили его на паузу то прийдется дважди ее снимать для запуска.]]></description>
        <author>ViktorXP</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1747615</guid>
        <pubDate>Wed, 31 Oct 2007 08:45:16 +0000</pubDate>
        <title>Узнать состояния потока (suspended или resume) с помощью API-функции</title>
        <link>https://forum.sources.ru/index.php?showtopic=208393&amp;view=findpost&amp;p=1747615</link>
        <description><![CDATA[DelphiLexx: Скажите, пожалуйста, можно ли:<br>1) узнать по Handle существует ли в системе поток с этим Handle<br>2) узнать текущее состояние потока(suspended или resume) по его Handle с помощью API-функции.]]></description>
        <author>DelphiLexx</author>
        <category>Delphi: Система, Windows API</category>
      </item>
	
      </channel>
      </rss>
	