我正在使用C程序嘗試在iOS應用程序中使用它,並儘可能少地進行修改。 C程序對一組輸入執行大量計算。從iOS中的C函數更新UI線程
在iOS端,我使用下面的代碼來創建一個線程來運行計算,並且還有一個機制來報告它什麼時候完成(目前,它完成時會更新一個UILabel操作系統「testLabel」) :
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
char *testChar = startProgram(nx, ny, nz); // this is where I call the C program
dispatch_async(dispatch_get_main_queue(), ^{
NSString *tempString = [[NSString alloc]initWithCString: testChar ];
testLabel.text = tempString;
[tempString release];
});
});
這似乎工作,我得到我的結果,我的用戶界面保持響應。
但是,我想從C例程返回UI進行通信,同時進行計算以獲取狀態以及遞增地傳回一些數據。
所以,我的C程序是這樣的:
char* startProgram(int nx, int ny, int nz)
{
setupEverything(); // this is just pseudo code for clarity
for(int i = 0; i < nz; i++)
{
doMajorCalculations();
reportBackToUI(someResults); // This is what I would LIKE to do
}
}
只見這裏一個線程關於通過「自我」,但我不認爲「自我」,如果通過以上將是我的班「自」。另外,我嘗試了這些,並在事物的C端發生了錯誤,並說它沒有識別「id」類型。我將「id」的類型更改爲類名稱,並告訴我參數錯誤。
有關實現此目的的最佳方法的任何想法?
謝謝你的幫助。
剛剛注意到塊中的dispatch_async,應該可以工作。不抱歉的道歉。 – davydotcom 2011-05-10 19:18:50
@davydotcom:這就是爲什麼我有dispatch_async(dispatch_get_main_queue(),^ {...'在如何使用回調的例子中,這是在主線程上運行代碼的魔力果汁 – PeyloW 2011-05-10 19:32:14
工作!謝謝你的幫幫我。 – 2011-05-11 12:58:01