怎样每隔一段时间修改一个变量的值 并且放在程序后台进行

时间:2021-09-06 15:55:09
作业要求做一个模拟电梯的系统   假如我想要电梯每隔2s 修改一次所在层数  这个功能需要用什么函数实现?  并且我想在电梯上升的同时进行一些其他的功能   比如  假如电梯在上升  我要增加一个用户  在我创建这个用户的信息的时候  并不妨碍 电梯每2s上升一层, 如何实现这个俩个功能呢?  拙计啊 ,求大神给个简单的示范代码  

4 个解决方案

#1


怎样每隔一段时间修改一个变量的值 并且放在程序后台进行貌似这里只提供帮助,对于求作业的估计......

#2


每求作业啊。。。就想知道这两个功能怎么实现 用什么函数啊

#3


首先从最简单的想法开始
我不清楚电梯怎么和用户扯上关系了,但你可以首先假设“只有在电梯停止运行时,才能进行用户相关的操作”

每隔一段时间执行某个操作,windows下可以使用定时器或者多线程
但对于初学者,我建议你还是从最简单的入手,一点点扩充内容吧,例如,先假设只有一个电梯,在多个楼层同时呼叫的时候该怎样行动,然后再谈模拟电梯实时运行的事

#4


//怎样每隔两秒修改一个变量的值 并且放在程序后台进行。
#include <stdio.h>
#include <time.h>
#include <sys/timeb.h>
#include <process.h>
#include <windows.h>
int var1;
CRITICAL_SECTION CS;
struct tm *now;
struct timeb tb;
char datestr[16];
char timestr[16];
char mss[4];
void thdA(void *pcn) {
    while (1) {
        Sleep(2000);
        EnterCriticalSection(&CS);
        var1++;
        LeaveCriticalSection(&CS);
    }
}
int main() {
    var1=1;
    InitializeCriticalSection(&CS);
    _beginthread((void(__cdecl *)(void *))thdA,0,(void *)1);
    while (1) {
        Sleep(500);
        EnterCriticalSection(&CS);
        ftime(&tb);
        now=localtime(&tb.time);
        sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
        sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );
        sprintf(mss,"%03d",tb.millitm);
        printf("%s %s.%s var1==%d\n",datestr,timestr,mss,var1);
        if (var1==9) {
            LeaveCriticalSection(&CS);
            break;
        } else {
            LeaveCriticalSection(&CS);
        }
    }
    DeleteCriticalSection(&CS);
    return 0;
}
//2013-06-19 16:51:02.468 var1==1
//2013-06-19 16:51:02.968 var1==1
//2013-06-19 16:51:03.468 var1==1
//2013-06-19 16:51:03.968 var1==1
//2013-06-19 16:51:04.468 var1==2
//2013-06-19 16:51:04.968 var1==2
//2013-06-19 16:51:05.468 var1==2
//2013-06-19 16:51:05.968 var1==2
//2013-06-19 16:51:06.468 var1==3
//2013-06-19 16:51:06.968 var1==3
//2013-06-19 16:51:07.468 var1==3
//2013-06-19 16:51:07.968 var1==4
//2013-06-19 16:51:08.468 var1==4
//2013-06-19 16:51:08.968 var1==4
//2013-06-19 16:51:09.468 var1==4
//2013-06-19 16:51:09.968 var1==4
//2013-06-19 16:51:10.468 var1==5
//2013-06-19 16:51:10.968 var1==5
//2013-06-19 16:51:11.468 var1==5
//2013-06-19 16:51:11.968 var1==5
//2013-06-19 16:51:12.468 var1==6
//2013-06-19 16:51:12.968 var1==6
//2013-06-19 16:51:13.468 var1==6
//2013-06-19 16:51:13.968 var1==6
//2013-06-19 16:51:14.468 var1==7
//2013-06-19 16:51:14.968 var1==7
//2013-06-19 16:51:15.468 var1==7
//2013-06-19 16:51:15.968 var1==7
//2013-06-19 16:51:16.468 var1==8
//2013-06-19 16:51:16.968 var1==8
//2013-06-19 16:51:17.468 var1==8
//2013-06-19 16:51:17.968 var1==8
//2013-06-19 16:51:18.468 var1==9
//

#1


怎样每隔一段时间修改一个变量的值 并且放在程序后台进行貌似这里只提供帮助,对于求作业的估计......

#2


每求作业啊。。。就想知道这两个功能怎么实现 用什么函数啊

#3


首先从最简单的想法开始
我不清楚电梯怎么和用户扯上关系了,但你可以首先假设“只有在电梯停止运行时,才能进行用户相关的操作”

每隔一段时间执行某个操作,windows下可以使用定时器或者多线程
但对于初学者,我建议你还是从最简单的入手,一点点扩充内容吧,例如,先假设只有一个电梯,在多个楼层同时呼叫的时候该怎样行动,然后再谈模拟电梯实时运行的事

#4


//怎样每隔两秒修改一个变量的值 并且放在程序后台进行。
#include <stdio.h>
#include <time.h>
#include <sys/timeb.h>
#include <process.h>
#include <windows.h>
int var1;
CRITICAL_SECTION CS;
struct tm *now;
struct timeb tb;
char datestr[16];
char timestr[16];
char mss[4];
void thdA(void *pcn) {
    while (1) {
        Sleep(2000);
        EnterCriticalSection(&CS);
        var1++;
        LeaveCriticalSection(&CS);
    }
}
int main() {
    var1=1;
    InitializeCriticalSection(&CS);
    _beginthread((void(__cdecl *)(void *))thdA,0,(void *)1);
    while (1) {
        Sleep(500);
        EnterCriticalSection(&CS);
        ftime(&tb);
        now=localtime(&tb.time);
        sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
        sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );
        sprintf(mss,"%03d",tb.millitm);
        printf("%s %s.%s var1==%d\n",datestr,timestr,mss,var1);
        if (var1==9) {
            LeaveCriticalSection(&CS);
            break;
        } else {
            LeaveCriticalSection(&CS);
        }
    }
    DeleteCriticalSection(&CS);
    return 0;
}
//2013-06-19 16:51:02.468 var1==1
//2013-06-19 16:51:02.968 var1==1
//2013-06-19 16:51:03.468 var1==1
//2013-06-19 16:51:03.968 var1==1
//2013-06-19 16:51:04.468 var1==2
//2013-06-19 16:51:04.968 var1==2
//2013-06-19 16:51:05.468 var1==2
//2013-06-19 16:51:05.968 var1==2
//2013-06-19 16:51:06.468 var1==3
//2013-06-19 16:51:06.968 var1==3
//2013-06-19 16:51:07.468 var1==3
//2013-06-19 16:51:07.968 var1==4
//2013-06-19 16:51:08.468 var1==4
//2013-06-19 16:51:08.968 var1==4
//2013-06-19 16:51:09.468 var1==4
//2013-06-19 16:51:09.968 var1==4
//2013-06-19 16:51:10.468 var1==5
//2013-06-19 16:51:10.968 var1==5
//2013-06-19 16:51:11.468 var1==5
//2013-06-19 16:51:11.968 var1==5
//2013-06-19 16:51:12.468 var1==6
//2013-06-19 16:51:12.968 var1==6
//2013-06-19 16:51:13.468 var1==6
//2013-06-19 16:51:13.968 var1==6
//2013-06-19 16:51:14.468 var1==7
//2013-06-19 16:51:14.968 var1==7
//2013-06-19 16:51:15.468 var1==7
//2013-06-19 16:51:15.968 var1==7
//2013-06-19 16:51:16.468 var1==8
//2013-06-19 16:51:16.968 var1==8
//2013-06-19 16:51:17.468 var1==8
//2013-06-19 16:51:17.968 var1==8
//2013-06-19 16:51:18.468 var1==9
//