openwrt 线程例子

1.使用YDHSDK

tree一下瞅瞅

├── bin
│   ├── demo
│   └── tcp_server
├── include
├── Makefile
├── obj
│   ├── main.o
│   └── Makefile
└── user
    ├── main.c
    ├── main.c~
    └── Makefile

 

外层 Makefile (注意加入 -lpthread 参数)

 1 ROOT = $(shell pwd)
 2 BIN_DIR = $(ROOT)/bin
 3 OBJ_DIR = $(ROOT)/obj
 4 USER_DIR = $(ROOT)/user
 5 
 6 TARGET = demo
 7 CFLAGS =  -lpthread -I $(ROOT)/include -I $(STAGING_DIR)/usr/include -L $(USER_DIR) -L $(STAGING_DIR)/usr/lib -ldl 
 8 
 9 CC = mipsel-openwrt-linux-gcc
10 
11 export OBJ_DIR ROOT CFLAGS BIN_DIR TARGET CC
12 
13 all: $(BIN)/$(TARGET)
14 
15 $(BIN)/$(TARGET):
16     make -C $(USER_DIR)
17     make -C $(OBJ_DIR)
18         
19 clean:
20     $(RM) $(OBJ_DIR)/*.o $(BIN_DIR)/$(TARGET)
21     
22 .PHONY:clean

2.main

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #include <pthread.h>
 5 #include <unistd.h>
 6 
 7 #if 0
 8 int main(void)
 9 {
10     printf("======================\r\n");
11     printf("   YDH SDK Test\n");
12     printf("======================\r\n");
13     return 0;
14 }
15 #else
16     
17 /* 声明结构体 */
18 struct member
19 {
20     int num;
21     char *name;
22 };     
23 
24 /* 定义线程pthread */
25 static void * pthread(void *arg)       
26 {
27     struct member *temp;
28     
29     /* 线程pthread开始运行 */
30     printf("pthread start!\n");
31     
32     /* 令主线程继续执行 */
33     sleep(2);
34     
35     /* 打印传入参数 */
36     temp = (struct member *)arg;      
37     printf("member->num:%d\n",temp->num);
38     printf("member->name:%s\n",temp->name);
39     unsigned char  i=0;
40     for(i=0;i<10;i++)
41     {
42         printf("\r\n %d \r\n",i);
43         sleep(1);
44     }
45     
46     return NULL;
47 }
48 
49 /* main函数 */
50 int main(int agrc,char* argv[])
51 {
52     pthread_t tidp;
53     struct member *b;
54 
55     /* 为结构体变量b赋值 */
56     b = (struct member *)calloc(1,sizeof(struct member));           
57     b->num=1;
58     b->name="mlq";              
59 
60     /* 创建线程pthread */
61     if ((pthread_create(&tidp, NULL, pthread, (void*)b)) == -1)
62     {
63         printf("create error!\n");
64         return 1;
65     }
66     
67     /* 令线程pthread先运行 */
68     sleep(1);
69     
70     /* 线程pthread睡眠2s,此时main可以先执行 */
71     printf("mian continue!\n");
72     
73     /* 等待线程pthread释放 */
74     if (pthread_join(tidp, NULL))                  
75     {
76         printf("thread is not exit...\n");
77         return -2;
78     }
79     else
80     {
81         printf("thread exit...\r\n");
82     }
83     
84     return 0;
85 }    
86 #endif

 

3.设置gcc和SDK PATH

export PATH=$PATH:/opt/mt7628/toolchain-mipsel_24kec+dsp_gcc-4.8-
linaro_uClibc-0.9.33.2/bin

export STAGING_DIR=/opt/mt7628/target-mipsel_24kec+dsp_uClibc-
0.9.33.2

 

4.make

 

5.上传测试

 1 root@OpenWrt:~# ./demo
 2 pthread start!
 3 mian continue!
 4 
 5 member->num:1
 6 member->name:mlq
 7 
 8  0
 9 
10  1
11 
12  2
13 
14  3
15 
16  4
17 
18  5
19 
20  6
21 
22  7
23 
24  8
25 
26  9
27 thread exit...
posted @ 2020-01-15 16:37  XZHDJH  阅读(302)  评论(0)    收藏  举报