2012-10-22 80 views
1

我在我的objective-c應用程序(TC.h和TC.mm)中有一個C++類,它有兩個方法,如下所示。將NSTimer添加到C++類

//TC.h 
class TC 
{ 
public: 
    void SetupPollTimer(); 
    void Timeout(); 
} 

//TC.mm 
void TC::Timeout() 
{ 
    //Inside timer handler 

} 
void TC::SetupPollTimer() 
{ 
    //Setup Timer 
    //Want to use NSTimer here.. 

} 

基本上當我打電話SetupPollTimer(),我要開始的NSTimer,與NSInvocation的,以便它反覆調用超時方法。 首先,這甚至是可能的。如果是這樣,我會很感激任何想法或指導。

+0

你的意思是'TC :: Timeout()'? – kennytm

+0

是的。對不起..編輯問題.. – Sharath

回答

2

在這種情況下,您只需使用CoreFoundation等價物; CFRunLoopTimer。

改爲使用NSTimer通常意味着需要綁定objc對象類型作爲定時器回調的參數。

這樣做,您可以將TC的this設置爲定時器回調的上下文信息。然後你就可以在回調中訪問你的TC實例。

0

在這篇文章請看:

Use C++ with Cocoa Instead of Objective-C?

顯然,你不能用C++寫的可可應用程序完全,但有辦法到C之間共享代碼++和Objective C.

編輯

好的,另一種選擇是將定時器添加到處理該CPP文件的類中,並在NSTimer啓動時觸發CPP方法處理文件。

我發現了一些在Objective C中使用C++實例的技術,但不是相反。

+0

這是一個Cocoa應用程序,即與appdelegates,Objective-C接口/實現等。其中一類必須在C++中。這個CPP類需要運行NSTimer並調用它自己的方法...類似於我發佈的問題。基本上,我猜你可以將C++方法的函數指針傳遞給NSInvocation,從而使它成爲選擇器,但沒有得到任何具體的例子來使用.. – Sharath

+0

編輯我的答案 – NSAddict