2009-05-27 88 views
4

我有一個函數正在從應用程序中的不同線程中調用。 我需要知道執行代碼的線程是主線程(ui線程)還是工作線程。如何知道代碼是否在ui線程或工作線程上運行(MFC Visual C++)

有什麼建議嗎?

謝謝。

+0

[如何獲取進程的主線程標識(由其ID標識)?](http://stackoverflow.com/questions/15597066/how-to-get-the-main-thread- id-of-process-known-by-its-id) – TarmoPikaro 2016-08-25 09:37:51

回答

11

如果您使用MFC應用程序,請使用以下代碼。

if(GetCurrentThreadId() == AfxGetApp()->m_nThreadID) 
{ 
    //Main Thread 
} 
else 
{ 
    //Not Main Thread 
} 
5

使用GetCurrentThread()GetCurrentTreadId(),並將其與主線程的已知手柄或ID進行比較。

不能有多個UI線程?

當然可以,但只有一個主要 UI線程。

好的。但是,有沒有辦法知道 這個代碼中的主線程的句柄或ID?我的意思是像 GetMainThread或GetMainThreadID。 I 不想修改應用程序的其他部分 (如果可能的話)。順便說一句, 感謝您的回答。

對不起,我出去吃午飯,你已經得到了你的答案。但不管怎樣,不妨回覆。 GetCurrentThreadId()當然可以在執行主UI線程期間使用,並且可以緩存以供以後比較。在執行應用程序的某個地方,只會有一個線程,例如在WinMain()之前創建任何其他線程。

乾杯!

+1

不能有多個UI線程嗎? – Naveen 2009-05-27 08:47:32

0

AfxGetApp() - > GetMainWnd()

將返回AfxGetMainWnd()將返回如果從主線程調用同樣的事情。

相關問題