2011-02-03 46 views
6

我可能失去了一些東西很明顯,但幽默我......如何Visual Studio中的線程窗口識別「主線程」

我總是喜歡來命名我的應用程序的重要主題,因爲它與調試很有/日誌記錄等等。如果你在程序啓動時通過Thread.CurrentThread.Name查詢主線程的名字,你將得到null。因此,我總是確保首先發生的事情是主線程(和任何其他相關線程)被賦予一個很好的意義名稱爲將來的參考

我從來沒有真正給過它很多想法,直到今天,但在Visual Studio中的線程窗口(在任何線程名稱分配之前編輯等),一個特殊的類別'主線程'被分配以及一個僞讀取名稱,該名稱也讀取「主線程」(但它不是實際的線程名稱)。

從託管的角度來看,.NET不會公開任何有意義的System.Threading.ThreadSystem.Diagnostics.ProcessThread,它標識應用程序的主線程(至少我可以看到)。我查看了Windows Process and Thread Functions的列表,再次,我沒有看到任何明顯的(也許是OpenThread?)。

好奇,如果有人知道線程窗口如何分配特殊類別「主線程」?

回答

5

調試器使用DEBUG_PROCESS選項開始使用CreateProcess進行調試。主線程的句柄在PROCESS_INFORMATION.hThread中返回,因此不會在那裏猜測。附加有點棘手,大概是它在用DebugActiveProcess()附加後從WaitForDebugEvent看到的第一個CREATE_THREAD_DEBUG_EVENT通知。

對於MDbg,source code可用,如果你想仔細看看。

+0

啊,這是有道理的;謝謝(你的)信息。 SourceCode絕對有趣。 – 2011-02-03 20:56:48