<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Classmemory processPatternScan lower cpu usage]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16547&amp;type=atom" />
	<updated>2021-08-25T02:06:57Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=16547</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Classmemory processPatternScan lower cpu usage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=149331#p149331" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Попробуйте вместо Sleep, 1 использовать, например<br /></p><div class="codebox"><pre><code>if !mod(A_Index, 10)
   Sleep, 1</code></pre></div></blockquote></div><p>Хороший комментарий. Спасибо.</p>]]></content>
			<author>
				<name><![CDATA[nullmdn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41945</uri>
			</author>
			<updated>2021-08-25T02:06:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=149331#p149331</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Classmemory processPatternScan lower cpu usage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=149329#p149329" />
			<content type="html"><![CDATA[<p>Попробуйте вместо Sleep, 1 использовать, например<br /></p><div class="codebox"><pre><code>if !mod(A_Index, 10)
   Sleep, 1</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-08-24T13:11:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=149329#p149329</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Classmemory processPatternScan lower cpu usage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=149328#p149328" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong></p><p>okay</p>]]></content>
			<author>
				<name><![CDATA[nullmdn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41945</uri>
			</author>
			<updated>2021-08-24T13:07:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=149328#p149328</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Classmemory processPatternScan lower cpu usage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=149326#p149326" />
			<content type="html"><![CDATA[<p>Hi, <strong>nullmdn</strong>!<br />Welcome to the forum!<br />The language of the forum is Russian, so please edit your post using Google Translate!</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2021-08-24T12:52:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=149326#p149326</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Classmemory processPatternScan lower cpu usage]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=149324#p149324" />
			<content type="html"><![CDATA[<p>Привет. Я кореец. Я не говорю по-русски. Пожалуйста пойми...</p><p>Я использую около 6 функций stringToPattern (processpatternscan) на цикл. из-за этого скорость использования процессора увеличилась, поэтому я добавил sleep 10 внутри функции stringToPattern, чтобы немного снизить скорость использования процессора.</p><div class="codebox"><pre><code>    stringToPatternSlow(string, encoding := &quot;UTF-8&quot;, insertNullTerminator := False)
    {   
        if !length := StrLen(string)
            return -1 ; no str  
        AOBPattern := []
        encodingSize := (encoding = &quot;utf-16&quot; || encoding = &quot;cp1200&quot;) ? 2 : 1
        requiredSize := StrPut(string, encoding) * encodingSize - (insertNullTerminator ? 0 : encodingSize)
        VarSetCapacity(buffer, requiredSize)
        StrPut(string, &amp;buffer, length + (insertNullTerminator ?  1 : 0), encoding) 
        loop, % requiredSize
        {
            [b]sleep 10[/b]
            AOBPattern.Insert(NumGet(buffer, A_Index-1, &quot;UChar&quot;))
        }   
        return AOBPattern
    }</code></pre></div><p>здесь я также добавил sleep 10 внутри processPatternScan, чтобы еще больше снизить загрузку процессора.</p><div class="codebox"><pre><code>    processPatternScan(startAddress := 0, endAddress := &quot;&quot;, aAOBPattern*)
    {
        address := startAddress
        if endAddress is not integer  
            endAddress := this.isTarget64bit ? (A_PtrSize = 8 ? 0x7FFFFFFFFFF : 0xFFFFFFFF) : 0x7FFFFFFF

        MEM_COMMIT := 0x1000, MEM_MAPPED := 0x40000, MEM_PRIVATE := 0x20000
        PAGE_NOACCESS := 0x01, PAGE_GUARD := 0x100
        if !patternSize := this.getNeedleFromAOBPattern(patternMask, AOBBuffer, aAOBPattern*)
            return -10  
        while address &lt;= endAddress ; &gt; 0x7FFFFFFF - definitely reached the end of the useful area (at least for a 32 target process)
        {
            [b]sleep 1[/b]
            if !this.VirtualQueryEx(address, aInfo)
                return -1
            if A_Index = 1
                aInfo.RegionSize -= address - aInfo.BaseAddress
            if (aInfo.State = MEM_COMMIT) 
            &amp;&amp; !(aInfo.Protect &amp; (PAGE_NOACCESS | PAGE_GUARD)) ; can&#039;t read these areas
            ;&amp;&amp; (aInfo.Type = MEM_MAPPED || aInfo.Type = MEM_PRIVATE) ;Might as well read Image sections as well
            &amp;&amp; aInfo.RegionSize &gt;= patternSize
            &amp;&amp; (result := this.PatternScan(address, aInfo.RegionSize, patternMask, AOBBuffer))
            {
                if result &lt; 0 
                    return -2
                else if (result + patternSize - 1 &lt;= endAddress)
                    return result
                else return 0
            }
            address += aInfo.RegionSize
        }
        return 0
    }</code></pre></div><br /><p>это может значительно снизить загрузку ЦП.<br />однако выполнение функции занимает много времени. Это занимает 2 секунды, если в функции processpatternscan нет «сна 1», а при добавлении «сна 1» - 1 минуту.</p><p>Есть ли способ лучше?</p>]]></content>
			<author>
				<name><![CDATA[nullmdn]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41945</uri>
			</author>
			<updated>2021-08-24T03:53:39Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=149324#p149324</id>
		</entry>
</feed>
