Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-在结构[time.h]中存储时间\u t变量时出错_C_Pthreads_Localtime_Time T_Time.h - Fatal编程技术网

C-在结构[time.h]中存储时间\u t变量时出错

C-在结构[time.h]中存储时间\u t变量时出错,c,pthreads,localtime,time-t,time.h,C,Pthreads,Localtime,Time T,Time.h,我正在构建一个遵循FIFO算法的进程调度器。我已经写了所有的代码,它正在工作,除了报告的一部分。下面是一个报告如何发布的示例: FIFO进程调度器 模拟#报告: -调度模拟算法:FIFO -进程数:3 -开始时间:19/12/2012 02:54:09***0){ 如果(processExecTime>0){ 时间=ramdomNumber(processExecTime,1); //printf(“----执行时间:%d\n”,时间); 睡眠(时间); processExecTime=proc

我正在构建一个遵循FIFO算法的进程调度器。我已经写了所有的代码,它正在工作,除了报告的一部分。下面是一个报告如何发布的示例:

FIFO进程调度器
模拟#报告:
-调度模拟算法:FIFO
-进程数:3
-开始时间:19/12/2012 02:54:09***0){
如果(processExecTime>0){
时间=ramdomNumber(processExecTime,1);
//printf(“----执行时间:%d\n”,时间);
睡眠(时间);
processExecTime=processExecTime-时间;
}
如果(processBlockTime>0){
时间=ramdomNumber(processBlockTime,1);
//printf(“----阻塞时间:%d\n”,时间);
睡眠(时间);
processBlockTime=processBlockTime-时间;
}
}
}否则{
时间=处理时间;
//printf(“----进程未被阻止。执行时间:%d\n”,时间);
睡眠(时间);
}
process.endTime=getSystemTimeNow();
printSystemTime(process.endTime);
process.durationTime=difftime(process.endTime,process.startTime);
}
void showReport(){
showSimulationReport();
printf(“==========================================================\n”);
showProcessReport();
printf(“==========================================================\n”);
}
作废showSimulationReport(){
/*模拟器:
a、 进程数,确定->进程数;
b、 以数量表示的执行时间;-OK>simulatorTimeInfo.startTime-simulatorTimeInfo.endTime
c、 流动;
d、 返回时间(数量)和平均响应时间(数量);
f、 阻塞时间的数量;确定->simulatorTimeInfo.blockTime
* /
双模拟持续时间=difftime(simulatorTimeInfo.endTime、simulatorTimeInfo.startTime);
双模拟输出流量=过程数/模拟持续时间;
printf(“模拟报告:\n”);
printf(“-模拟调度算法:FIFO\n”);
printf(“-进程数:%d\n”,numberOfProcess);
printf(“-开始时间:”);
printSystemTime(simulatorTimeInfo.startTime);
printf(“-持续时间:%.1f秒\n”,模拟持续时间);
printf(“-模拟流出:%f进程/秒\n”,模拟流出);
//项目d
//项目e
printf(“-总阻塞时间:%d秒\n”,simulatorTimeInfo.blockTime);
}
void showProcessReport(){
/*每个过程:
a、 开始时间,确定->process.startTime
b、 工期数量;
c、 结束时间,确定->进程.endTime
d、 数量上的流量和返回时间;
g、 数量上的平均响应时间;
h、 数量上的锁定时间;确定->进程.blockTime
* /
int进程报告计数;
for(processesReportCount=0;processesReportCount0){
process.gonaBlock=确定进程块(计数);
if(process.block==1){
if(process.totalTime<进程\块\时间\最大值){
process.blockTime=ramdomNumber((process.totalTime-1),process\u BLOCK\u TIME\u MIN);
}否则{
process.blockTime=ramdomname(进程块时间最大,进程块时间最小);
}
}
}
process.execTime=process.totalTime-process.blockTime;
simulatorTimeInfo.blockTime=simulatorTimeInfo.blockTime+进程.blockTime;
返回过程;
}
整数确定进程块(整数计数){
int blockF;
如果(计算tm年+1900,tm->tm月+1,tm->tm日,tm->tm小时,tm->tm分钟,tm->tm秒);
}

您的代码太长,无法通读。时间设置在不同的线程上吗?据我所知,堆栈不是共享的,所以我希望您在一个线程上设置的内容在另一个线程上不可见。在堆上分配以避免这种情况。

问题在于,您通过值将
进程
参数传递给
进程执行
。这意味着在
processExecute
函数中,
process
变量与任何其他局部变量一样,变量的生存期就是函数的生存期。因此,对结构的任何更改都不会向上传递

你需要
void processExecute(Process *process){
    process->startTime = getSystemTimeNow();

    /* ... */
}