#include
#include
#include
/*并行计算值:y1=3*x1^2+7*a1*b1+c1(寿命为1);y2=3*x2^2+7*a2*b2+c2(寿命为1);y3=3*x3^2+7*a3*b3+c3(寿命为5);*/
typedef struct _mytask
{
struct _coefficient
{
unsigned int a;
unsigned int b;
unsigned int c;
}co;
struct _variable
{
unsigned int x;
unsigned long y;
}v;
}mytask;
#define THREAD_OVER -1
#define THREAD_NOTOVER 0
char mythread(mytask task,unsigned int process)
{
unsigned int z;
int ret=0;
switch(process)
{
case 0:
task.v.x=rand();
task.v.y=3;
break;
case 1:
task.v.y*=task.v.x;
task.v.y*=task.v.x;
break;
case 2:
z=7;
z*=task.co.a;
break;
case 3:
z*=task.co.b;
z*=task.v.x;
break;
case 4:
task.v.y+=z;
task.v.y+=task.co.c;
}
process++;
if (process>4)
{
printf("%ld\n",task.v.y);
ret=-1;
process=0;
system("pause");
}
return ret;
}
mytask task1,task2,task3;
void inittask(mytask task,unsigned int a,unsigned int b,unsigned int c)
{
task.co.a=a;
task.co.b=b;
task.co.c=c;
}
void main(void)
{
unsigned int istask_1_living=1;
unsigned int task1_tread_process=0;
unsigned int istask_2_living=1;
unsigned int task2_tread_process=0;
unsigned int istask_3_living=5;
unsigned int task3_tread_process=0;
inittask(task1,9,7,18);
inittask(task2,4,13,16);
inittask(task3,2,24,3);
while (1)
{
if(istask_1_living)
{
istask_1_living+=mythread(task1,task1_tread_process);
}
if(istask_2_living)
{
istask_2_living+=mythread(task2,task2_tread_process);
}
if(istask_3_living)
{
istask_3_living+=mythread(task3,task3_tread_process);
}
}
}
你这个要计算个啥?编译通过,还有可能是逻辑出现了问题
额,你定义的函数返回为char,实际返回的是int,代码太凌乱了,编译没问题,执行结果有问题,应该是代码逻辑的问题,多加一些打印,或者直接使用断点调试一下。
首选错误分为:编译时错误和运行时错误。你说的编译通过了,说明代码没有语法错误,编译器可以解析成对应的机器指令~但这不能保证运行结果符合预期,因为代码本身可能存在设计上的缺陷~