Сомневаюсь в окне Темы визуальной студии - PullRequest
1 голос
/ 12 сентября 2010

alt text

Как вы можете видеть выше, в одном и том же месте находятся 4 потока win32, как это понять? ОБНОВЛЕНИЕ

7C92E4BE  mov         dword ptr [esp],eax 
7C92E4C1  mov         dword ptr [esp+4],0 
7C92E4C9  mov         dword ptr [esp+8],0 
7C92E4D1  mov         dword ptr [esp+10h],0 
7C92E4D9  push        esp  
7C92E4DA  call        7C92E508 
7C92E4DF  mov         eax,dword ptr [esp] 
7C92E4E2  mov         esp,ebp 
7C92E4E4  pop         ebp  
7C92E4E5  ret              
7C92E4E6  lea         esp,[esp] 
7C92E4ED  lea         ecx,[ecx] 
7C92E4F0  mov         edx,esp 
7C92E4F2  sysenter         
7C92E4F4  ret        

Ответы [ 4 ]

4 голосов
/ 12 сентября 2010

Скорее всего, они спят в чем-то вроде WaitForSingleObject или подобном.

1 голос
/ 12 сентября 2010

Отладчик показывает следующую команду процессора ring3, которая будет выполнена.В этом случае поток вызвал sysenter, который выполняет системный вызов ring0 для ядра операционной системы.Этот системный вызов ядра ожидает, пока что-то произойдет, прежде чем вернуть управление обратно вызывающему коду.Как только это что-то произойдет, оно вызовет следующую инструкцию пользовательского режима, которая в данном случае является ret.

Если у вас есть 4 потока, которые все вызывают одну и ту же функцию, которая ожидает системного вызова в то жеместоположение, у вас будет 4 темы, которые показывают тот же адрес в окне темы.Это то, что вы часто будете видеть в приложениях, созданных с помощью подсистемы Windows, которые обычно имеют ряд потоков, запускаемых API Windows, которые проводят большую часть своего времени в ожидании событий ядра.

1 голос
/ 12 сентября 2010

Вам нужно будет игнорировать потоки, которые запускаются кодом Microsoft. Я полагаю на mmsys или DirectX с вашего снимка экрана. Код Microsoft очень многопоточный.

Вы можете получить лучшую диагностику о том, что они делают, если вы включите Microsoft Symbol Server . Вы получите приличные имена в окне Call Stack, часто позволяя вам угадать, какова их цель. Конечно, вы никогда не сможете взглянуть на их код.

1 голос
/ 12 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...