main()
{
i=9000000000; // to synchronize thread with while loop
while(i)i--; //if i don't use these two lines then my program terminates before thread starts.
udp_socket();
fun();
}
udp_socket()
{
// open a udp socket then create thread
pthread_create(tid1,NULL,fun2,(int *)socket_descriptor2);
}
fun()
{
}
fun2(int socket_descriptor2)
{
while(1)
{
}
}
我打开一个UDP套接字,然后创建一个线程,在线程内部,while循环连续接收定义的ip和端口上的数据。
当主要终止时,我的线程停止工作.....
我想连续执行我的线程,即使main()终止或我的main()也连续执行而没有终止。
我该如何实现?
答案 0 :(得分:1)
如果您不希望<LinearLayout
android:orientation="vertical"
android:id="@+id/main_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/f1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.5"/>
<FrameLayout
android:id="@+id/f2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.5"/>
</LinearLayout>
过早终止,请至少等待线程终止。假设您的主文件中有main
可访问,对tid1
的简单调用将让主线程等待。
答案 1 :(得分:1)
在下面的示例中,main
等待线程完成(fun2
返回)。在fun2
上输入整数时会返回stdin
。
#include <stdio.h>
#include <pthread.h>
void fun() {
printf("Hello from fun\n");
}
void fun2() {
int a;
scanf("%d", &a);
}
pthread_t udp_socket() {
pthread_t tid;
pthread_create(&tid,NULL,fun2,NULL);
return tid;
}
int main() {
void * ret = NULL;
pthread_t t = udp_socket();
fun();
if(pthread_join(t, &ret)) { // Waits for thread to terminate
printf("Some Error Occurred\n");
}
else {
printf("Successfully executed\n");
}
Here是有关pthread_join
的更多信息。
答案 2 :(得分:1)
我想连续执行我的线程,即使main()终止
要执行此操作,请致电int main()
:
pthread_exit()
int main(void)
{
...
pthread_exit(NULL); /* This call exits main() and leaves all other thread running. */
return 0; /* Is never reached, it's just there to silence the compiler. */
}