C++实现多线程adb bugreport
在DEV-C++上实现,下面变量定义数组可能有些编译器不支持,可以使用malloc进行自定义长度。
这个多线程也可用于其他可能会阻塞标准输出的adb命令只要改掉run中的一部分即可
#include <process.h>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
unsigned int __stdcall run(void *serialno)
{
char buf[64];
memset(buf,0,sizeof(buf));
//CreateDirectory((char*)(serialno),NULL);
sprintf(buf,"adb -s %s bugreport %s",(char*)(serialno),(char*)(serialno));
system(buf);
return 0;
}
char* clearSpace(char* buf){
for(int i=0;i<128;i++){
if(buf[i]==' '){
buf[i]='\0';
return buf;
}
}
return NULL;
}
int main()
{
char buf[128];
char* tmp = NULL ;
char** serialno=(char**)malloc(sizeof(char**));
int count = 0;
memset(buf,0,sizeof(buf));
FILE* pipe = popen("adb devices","r");
while(!feof(pipe)){
if(fgets(buf,128,pipe)){
tmp = strstr(buf,"device");
if(NULL!=tmp){
if(*(tmp+6)!='\n') continue;
*tmp = '\0';
printf("%s\n",buf);
clearSpace(buf);
serialno=(char**)realloc(serialno,(count+1)*sizeof(char**));
*(serialno+count)=(char*)malloc(sizeof(buf));
strcpy(*(serialno+count),buf);
count++;
}else{
continue;
}
tmp=NULL;
}
}
pclose(pipe);
HANDLE handle[count];//这种写法只在这个DEV-C++ 不符合C语言的语法
for(int i=0;i<count;i++){
handle[i] = (HANDLE)_beginthreadex(NULL,0,run,*(serialno+i),0,NULL);
}
WaitForMultipleObjects(count,handle,TRUE,INFINITE);
for(int i=0;i<count;i++){
free(*(serialno+count));
}
free(serialno);
return 0;
}