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...

浙公网安备 33010602011771号