objective-c - 从 iOS 中的 C 函数中更新 UI 线程
<p><p>我正在使用一个 C 程序来尝试在我的 iOS 应用程序中使用它,并且尽可能少地进行修改。 C 程序对一组输入执行大量计算。</p>
<p>在 iOS 端,我使用以下代码来创建一个线程来运行计算,并且还有一种机制可以在计算完成时进行报告(目前,它会在完成时更新 UILabel os "testLabel"): </p>
<pre><code>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 = [initWithCString: testChar ];
testLabel.text = tempString;
;
});
});
</code></pre>
<p>这似乎可行,我得到了结果,并且我的 UI 保持响应。 </p>
<p>但是,我希望在计算进行时从 C 例程与 UI 进行通信,以便获取状态以及以增量方式传回一些数据。 </p>
<p>所以我的 C 程序应该是这样的:</p>
<pre><code>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
}
}
</code></pre>
<p>我在这里看到一个关于传递“self”的线程,但我认为如果通过上面的“self”将不会是我的类“self”。另外,我试过了,在 C 端得到了一个错误,说它不能识别类型“id”。我把“id”的类型改成类名,它告诉我参数错误。</p>
<p>关于实现这一点的最佳方法的任何想法?</p>
<p>感谢您的帮助。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>声明一个全局 c void*</p>
<pre><code>void* sipUACObj;
</code></pre>
<p>并在你的类初始化器中为它分配objective-c类对象</p>
<pre><code>sipUACObj = self;
</code></pre>
<p>现在,当您需要从 C 函数调用某些内容时,请执行以下操作,</p>
<pre><code>ObjcClass *obj = (ObjcClass*) sipUACObj;
;
</code></pre>
<p>这将调用相应的 Objective-C 函数,您可以在该函数中调用您的主 UI 线程。</p>
<p>您可以创建一个单例类并在其初始化时将其分配给 void 指针,然后在您的 C 函数中执行必要的操作。</p></p>
<p style="font-size: 20px;">关于objective-c - 从 iOS 中的 C 函数中更新 UI 线程,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/5951244/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/5951244/
</a>
</p>
页:
[1]