我使用线程用C如下问题:与线程用C
pthread_t thread;
if (pthread_create (& thread, NULL, thread_func (in, out), NULL)! = 0)
{
return -1;
}
// code goes further
所以一切正常,但公告之后线程的代码立即只是整个线程后执行,但不是。如何让线程开始并与他一起进一步的代码?
编辑: 我的意思是说我更新流程后编写的代码只在函数thread_funts完成工作后才开始播放。我需要在更新流之后同时工作流程和代码。例如:
static void * thread_func()
{
int i;
for (i = 0; i!=40; i++)
{
__android_log_print(ANDROID_LOG_INFO, "SDL", "OK");
}
}
JNIEXPORT jint JNICALL Java_org_divenvrsk_android_hellondk_HelloNDK_work (JNIEnv * env, jobject obj, jbyteArray array)
{
pthread_t thread;
if (pthread_create (& thread, NULL, thread_func(), NULL)! = 0)
{
return -1;
}
__android_log_print(ANDROID_LOG_INFO, "SDL", "gggggggg");
}
我得到这个:
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
这里40次OK
06-11 20:01:20.955: INFO/SDL(5238): gggggggg
即,首先进行整个线程,然后进一步的代码,我需要满足同时,线程和公告线程后的代码。 也就是说,它是必要的,发生这样的地方:
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.955: INFO/SDL(5238): gggggggg
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
06-11 20:01:20.951: INFO/SDL(5238): OK
这里40次OK
这很难理解你在问什么。你可能会张贴你所看到的一些“模拟”输出(就像在这个代码和'thread_func'中都有一个printf一样),并发布你想要发生的事情吗? – Mat 2011-06-11 11:47:10
发布真实的代码。 – cnicutar 2011-06-11 11:47:43
如果您想暂停当前线程并让其他线程完成某项工作,请调用[pthread_yield](http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_yield.3.html)在当前线程中。 – 2011-06-11 12:14:59