在Objective-C中的后台运行C函数

在Objective-C中的后台运行C函数,objective-c,c,multithreading,Objective C,C,Multithreading,我想在Objective-C应用程序中调用C函数。该函数包含一个无限循环。所以我需要在后台运行这个C函数 这是我的C函数: int go(){ for(;;){ //... } return 0; } 电话: [self performSelectorInBackground:go() withObject:nil]; 调用了函数go(),但它没有在后台运行(并且应用程序停止工作…。嗯,可能有更简单的方法,但是 - (int)doGo { re

我想在Objective-C应用程序中调用C函数。该函数包含一个无限循环。所以我需要在后台运行这个C函数

这是我的C函数:

int go(){
    for(;;){
        //...
    }
    return 0;
}
电话:

[self performSelectorInBackground:go() withObject:nil];

调用了函数
go()
,但它没有在后台运行(并且应用程序停止工作…。

嗯,可能有更简单的方法,但是

- (int)doGo {
    return go();
}
然后

[self performSelectorInBackground:@selector(doGo) withObject:nil];


因此,这个答案实际上只是强调了我认为您提供的代码最基本的问题,但是您肯定应该看到Ryan的答案并使用GCD<代码>性能选择背景:真的没那么好。

嗯,也许有更简单的方法,但是

- (int)doGo {
    return go();
}
然后

[self performSelectorInBackground:@selector(doGo) withObject:nil];


因此,这个答案实际上只是强调了我认为您提供的代码最基本的问题,但是您肯定应该看到Ryan的答案并使用GCD<代码>性能选择背景:真的没那么好。

嗯,也许有更简单的方法,但是

- (int)doGo {
    return go();
}
然后

[self performSelectorInBackground:@selector(doGo) withObject:nil];


因此,这个答案实际上只是强调了我认为您提供的代码最基本的问题,但是您肯定应该看到Ryan的答案并使用GCD<代码>性能选择背景:真的没那么好。

嗯,也许有更简单的方法,但是

- (int)doGo {
    return go();
}
然后

[self performSelectorInBackground:@selector(doGo) withObject:nil];


因此,这个答案实际上只是强调了我认为您提供的代码最基本的问题,但是您肯定应该看到Ryan的答案并使用GCD<代码>性能选择背景:真的不是那么好。

即使在后台,您也可能应该以无休止的循环运行某些东西。然而,这是可能的

[self performSelectorInBackground:<selector> withObject:<Object>];

即使在后台,您也可能应该以无休止的循环运行某些内容。然而,这是可能的

[self performSelectorInBackground:<selector> withObject:<Object>];

即使在后台,您也可能应该以无休止的循环运行某些内容。然而,这是可能的

[self performSelectorInBackground:<selector> withObject:<Object>];

即使在后台,您也可能应该以无休止的循环运行某些内容。然而,这是可能的

[self performSelectorInBackground:<selector> withObject:<Object>];


一个简单的ObjC方法包装器也可以像nhgrif建议的那样工作,但正如我提到的,您可能希望给它一个私有的后台线程,而不是无限期地阻塞您的后台线程。很高兴我能提供帮助。我鼓励你听一些评论,并深入挖掘。Web套接字是一个备受探索的主题,所以它很可能像火箭或AFNetworking这样的东西能够提供苹果已经提供的支持。当你不必通过学术练习时,不要重新发明轮子。快乐编码!一个简单的ObjC方法包装器也可以像nhgrif建议的那样工作,但正如我提到的,您可能希望给它一个私有的后台线程,而不是无限期地阻塞您的后台线程。很高兴我能提供帮助。我鼓励你听一些评论,并深入挖掘。Web套接字是一个备受探索的主题,所以它很可能像火箭或AFNetworking这样的东西能够提供苹果已经提供的支持。当你不必通过学术练习时,不要重新发明轮子。快乐编码!一个简单的ObjC方法包装器也可以像nhgrif建议的那样工作,但正如我提到的,您可能希望给它一个私有的后台线程,而不是无限期地阻塞您的后台线程。很高兴我能提供帮助。我鼓励你听一些评论,并深入挖掘。Web套接字是一个备受探索的主题,所以它很可能像火箭或AFNetworking这样的东西能够提供苹果已经提供的支持。当你不必通过学术练习时,不要重新发明轮子。快乐编码!一个简单的ObjC方法包装器也可以像nhgrif建议的那样工作,但正如我提到的,您可能希望给它一个私有的后台线程,而不是无限期地阻塞您的后台线程。很高兴我能提供帮助。我鼓励你听一些评论,并深入挖掘。Web套接字是一个备受探索的主题,所以它很可能像火箭或AFNetworking这样的东西能够提供苹果已经提供的支持。当你不必通过学术练习时,不要重新发明轮子。快乐编码!无论你在做什么,都有可能找到更好的方法。你能告诉我们你实际上想要完成什么吗?使用Objective-C“glue”代码调用你的C方法。@HotLicks你能引用这个“glue”吗?我想了解一下。@fa7d0如果该套接字服务器来自某个跨平台库,那么——也许——就可以了。不过,一般来说,如果您的程序采用系统API,它将更高效(并且使用更少的电源)。当然,这并不总是可行的。@bbum我同意。我“重新发明轮子”只是为了一个个人目标。对于一个更“严肃”的项目,我会用系统API来完成它。不管你在做什么,很可能有更好的方法来完成它。你能告诉我们你实际上想要完成什么吗?使用Objective-C“glue”代码调用你的C方法。@HotLicks你能引用这个“glue”吗?我想了解一下。@fa7d0如果该套接字服务器来自某个跨平台库,那么——也许——就可以了。不过,一般来说,如果您的程序采用系统API,它将更高效(并且使用更少的电源)。当然,这并不总是可行的。@bbum我同意。我“重新发明轮子”只是为了一个个人目标。对于一个更“严肃”的项目,我会用系统API来完成它。不管你在做什么,很可能有更好的方法来完成它。你能告诉我们你实际上想要完成什么吗?使用Objective-C“glue”代码调用你的C方法。@HotLicks你能引用这个“glue”吗?我想了解一下。@fa7d0如果该套接字服务器来自某个跨平台库,那么——也许——就可以了。不过,总的来说,你的程序会更有效率(a)