与main()的线程同步

时间:2015-07-03 05:52:53

标签: c sockets pthreads

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)
    {
    }
}
  1. 我打开一个UDP套接字,然后创建一个线程,在线程内部,while循环连续接收定义的ip和端口上的数据。

  2. 当主要终止时,我的线程停止工作.....

  3. 我想连续执行我的线程,即使main()终止或我的main()也连续执行而没有终止。

  4. 我该如何实现?

3 个答案:

答案 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. */
}