2011-01-10 57 views
2

我放棄了直接從windows API創建GUI,所以我要使用表單。我想多線程化我的應用程序,並將GUI包裝在一個類中,並將其放在單獨的線程中。當我點擊一個按鈕等,它會改變將從主線程讀取的結構中的值。我的問題是,當我編譯我的應用程序時,我得到鏈接器錯誤。在使用/ clr編譯時使用boost線程

 
1>Core.obj : error LNK2022: metadata operation failed (8013119F) : A TypeRef exists which should, but does not, have a corresponding TypeDef: (dummy): (0x0100001f). 

我對main的代碼如下。

 
int main() 
{ 
//create thread object pointer 
    boost::thread *GUIThread; 
//create pointer to GUIInterface, which contains a member function that 
//contains the Application::Run 
    GUIInterface *myinterface; 
    myinterface = new GUIInterface; 

    GUIThread = new boost::thread(boost::bind(&GUIInterface::MainFunction, myinterface)); 
    return 0; 
} 

創建上課的時候,並呼籲在主線程的功能,但使用升壓它工作正常,會引起問題。我使用正確的編譯器MSVC-10.0構建了boost,並且線程庫一直工作在過去,但是clr只會導致問題。 有關如何解決此問題的任何建議? 或者如果我應該只使用.net多線程(如果我這樣做,我真的需要一些鏈接來指導如何使用C++,我發現的大多數東西都在C#中)。 謝謝。

+1

您正在收到此錯誤,因爲boost :: thread使用r值引用。不受管理的鏈接器支持。您正以這種方式前往火車殘骸,用戶界面不是您可以直接插入的東西。您必須創建一個單線程的公寓,UI基本上是線程不安全的。不知道如何讓你擺脫困境。 – 2011-01-10 19:33:19

回答

2

在託管應用程序中使用boost::thread時有兩個問題。第一個是你遇到的鏈接器錯誤。第二個是應用程序啓動時的初始化錯誤,如果boost::thread實現與應用程序靜態鏈接。

這兩個問題都在older bug report中提到。我不知道這是否在後來的版本中發生了變化; 1.43也有同樣的問題。我認爲不是因爲案件被關閉wontfix