c - С.创建线程
问题描述
任务如下:
编写一个程序,将一组数据文件名(任意数量)作为参数,并运行所有文件以进行并行处理(使用线程)。作为处理,使用排序方法(quickSort)。
我通过 QNX 操作系统上的 vmbox 运行了这个程序。它已经编译但什么也没做。我的项目文件夹中有一个带有数字的文本文件,它们没有任何反应。或者应该有几个......(我的意思是文件)还有一件事情。编译时收到一个警告。在这个标志之后}
,它“关闭”了void *FileToArray
警告如下:控制到达非无效函数的结尾。如何解决?
我是根据方法论指南做的。但也许我错过了一些东西。如果你能告诉我我做错了什么,我将不胜感激。
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <sys/syspage.h>
void quickSort (int *b,int left, int right){
int sort;
int Dleft = left;
int Dright = right;
sort = b[left];
printf ("%d",pthread_self());
while(left<right){
while((b[right]>=sort)&&(left<right))
right--;
if (left!=right){
b[left]=b[right];
left++;
}
while((b[left]<=sort)&&(left<right))
left++;
if(left!=right)
{
b[right]=b[left];
right --;
}
}
b[left]=sort;
sort=left;
left=Dleft;
right=Dright;
if(left<sort)
quickSort(b,left,sort-1);
if(right>sort)
quickSort(b,sort+1,right);
}
void *FileToArray(void *name){
int i =0,j =0;
int *a=(int*)malloc(sizeof(int)*2);
FILE *f=fopen(name,"r");
printf("start - %p\n",name);
while (feof(f)==0){
fscanf(f, "%d",&a[i]);
i++;
a=(int*)realloc(a,sizeof(int)*i+1);
}
fclose(f);
quickSort(a,0,i-2);
f=fopen(name,"w");
for (j=0;j<i-1;j++){
fprintf(f, "%d\n",a[j]);
}
free(a);
fclose(f);
printf("finish - %p\n",name);
}
int num_lines_per_cpu;
int num_cpus;
int main(int argc, char** argv) {
int j;
pthread_t *thread_ids;
num_cpus = syspage_ptr->num_cpu;
thread_ids=malloc(sizeof(pthread_t)*num_cpus);
num_lines_per_cpu=argc%num_cpus;
for(j=1;j<argc;j++){
pthread_create (&thread_ids[j-1],NULL,FileToArray,argv[j]);
}
for(j=0;j<argc-1;j++){
pthread_join(thread_ids[j],NULL);
}
return EXIT_SUCCESS;
}
解决方案
警告如下:控制到达非无效函数的末尾。如何解决?
正如它所说,你没有从你的函数中返回任何东西,但返回类型是void*
.
除非我错过了,否则在该函数中没有任何地方返回指针。
推荐阅读
- javascript - 检测一个按钮,然后在 JavaScript 中按下它
- flutter - 无法检索 Flutter 项目中 Graphql 突变中发生的错误
- mongodb - 将 Mongodb 数据直播到 mongo 云
- javascript - 使用 XHR 执行 HTTP POST 或 PUT 请求时是否应该检查状态?
- vue.js - 如何将两个自动完成与 vuetify 联系起来?
- android - 在android 10中无法在真实设备的手机存储中找到文件
- delphi - Delphi 中的数据集运行时创建
- scala - java.lang.NoClassDefFoundError 编译简单程序 scala
- c++ - OpenGL 无法使用 VAO 程序更新顶点缓冲区
- vb.net - 在我选择一个单元格或在其上使用滚轮之前,Datagridview 不显示数据