ShakalX Ответов: 2

Помощь по использованию системы.продевать нитку


private void button2_Click(object sender, EventArgs e)
           {
           string Scan1Aob = ("?? 00 00 00 FF FF FF FF 00 E1 F5 05 00 00 00 00 01");
           string Scan2Aob = ("11 00 00 00 FF FF FF FF 00 E1 F5 05 00 00 00 00 01");

           button2.Text = "10%";
           Application.DoEvents();
           Aobscan.ReadAOB(Scan1Aob);
           button2.Text = "80%";
           Application.DoEvents();
           if (Aobscan.WriteAOB(Scan2Aob))
               {
               button2.Text = "ON";
               System.Media.SystemSounds.Beep.Play();
               }
           else
               {
               System.Media.SystemSounds.Hand.Play();
               MessageBox.Show("OPS-ERROR");
               button2.Text = "OFF";
               }
           }


Что я уже пробовал:

Привет, ребята. нужна помощь. Я хочу сканировать память процесса, но это занимает слишком много времени, чтобы закончить. Я читал, что с помощью протекторов это происходит намного быстрее. Я хотел бы получить практический пример того, как я могу это использовать. Большое спасибо.

2 Ответов

Рейтинг:
1

OriginalGriff

Потоки не обязательно ускоряют что-либо (в некоторых случаях они действительно могут замедлить вас). Один и тот же объем данных должен быть обработан независимо от того, сколько потоков используется, потоковая обработка просто позволяет вам "размазать его" по всей системе, делая несколько вещей одновременно.

Каждый поток нуждается в ядре для запуска - и Windows выделяет ядра на приоритетной основе, так что если ваш процессор имеет ядра, которые не используются при запуске потоковой передачи приложения, то они могут быть использованы для обработки разделов задачи.

Что вам нужно сделать, так это разделить сканирование на разные потоки, чтобы один поток выполнял первую половину, а другой-вторую. Точно так же, как вы сделали бы это с кодом, как ... ГМ ... как бы плохо вы ни показывали, это другое дело: любой код, вызывающий DoEvents, подозрителен с самого начала, поскольку он указывает на то, что вы действительно не поняли фреймворк, для которого кодируете, и все еще думаете процедурным способом, а не способом сообщения / события.

Именно то, как вы разделите это, будет зависеть от того, как ваш класс Aobscan выполняет свою работу - и у нас нет никакого доступа к этому. Начните с просмотра класса BackgroundWorker - это, вероятно, самый простой способ получить потоковую обработку вместе с отчетами о ходе выполнения: MSDN[^] - ссылка включает в себя пример.


ShakalX

спасибо

Рейтинг:
1

Richard MacCutchan

Использование потоков мочь получите результаты быстрее, но нет никакой гарантии, так как это зависит от слишком многих переменных. Если у вас нет хорошего понимания того, как операционная система обрабатывает потоки, и что вам нужно сделать для максимальной эффективности, лучше не использовать их.

Google найдет для Вас множество примеров кода и технических документов по этому вопросу.


ShakalX

спасибо =)