首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言学习记要之——单线程非阻塞延时

2012-07-08 
C语言学习记录之——单线程非阻塞延时C/C++ code#include time.hmain(){float time_start,time_endtime_s

C语言学习记录之——单线程非阻塞延时

C/C++ code
#include "time.h"main(){float time_start,time_end;time_start=clock();while(1){time_end = clock();if ((time_end - time_start) / CLK_TCK >= 2){printf("ok\n");time_start=time_end;}}}


[解决办法]
对比一下用多线程:
C/C++ code
#include <stdio.h>#include <stdlib.h>#include <string.h>#ifdef WIN32    #include <windows.h>    #include <io.h>    #include <process.h>    #define  MYVOID             void#else    #include <unistd.h>    #include <sys/time.h>    #include <pthread.h>    #define  CRITICAL_SECTION   pthread_mutex_t    #define  _vsnprintf         vsnprintf    #define  MYVOID             void *#endif//Log{#define MAXLOGSIZE 20000000#define ARRSIZE(x) (sizeof(x)/sizeof(x[0]))#include <time.h>#include <sys/timeb.h>#include <stdarg.h>char logfilename1[]="MyLog1.log";char logfilename2[]="MyLog2.log";char logstr[16000];char datestr[16];char timestr[16];char mss[4];CRITICAL_SECTION cs_log;FILE *flog;#ifdef WIN32void Lock(CRITICAL_SECTION *l) {    EnterCriticalSection(l);}void Unlock(CRITICAL_SECTION *l) {    LeaveCriticalSection(l);}void sleep_ms(int ms) {    Sleep(ms);}#elsevoid Lock(CRITICAL_SECTION *l) {    pthread_mutex_lock(l);}void Unlock(CRITICAL_SECTION *l) {    pthread_mutex_unlock(l);}void sleep_ms(int ms) {    usleep(ms*1000);}#endifvoid LogV(const char *pszFmt,va_list argp) {    struct tm *now;    struct timeb tb;    if (NULL==pszFmt||0==pszFmt[0]) return;    if (-1==_vsnprintf(logstr,ARRSIZE(logstr),pszFmt,argp)) logstr[ARRSIZE(logstr)-1]=0;    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 %s",datestr,timestr,mss,logstr);    flog=fopen(logfilename1,"a");    if (NULL!=flog) {        fprintf(flog,"%s %s.%s %s",datestr,timestr,mss,logstr);        if (ftell(flog)>MAXLOGSIZE) {            fclose(flog);            if (rename(logfilename1,logfilename2)) {                remove(logfilename2);                rename(logfilename1,logfilename2);            }            flog=fopen(logfilename1,"a");            if (NULL==flog) return;        }        fclose(flog);    }}void Log(const char *pszFmt,...) {    va_list argp;    Lock(&cs_log);    va_start(argp,pszFmt);    LogV(pszFmt,argp);    va_end(argp);    Unlock(&cs_log);}//Log}int No_Loop=0;MYVOID testThread(void *pcn) {    int n,i;    n=(int)pcn;    i=0;    while (1) {        sleep_ms(1000);        Log("in testThread %d:i==%ds\n",n,++i);        if (i>=5) No_Loop=1;    }}int main(int argc,char * argv[]) {    int i;#ifdef WIN32    InitializeCriticalSection(&cs_log);#else    pthread_mutex_init(&cs_log,NULL);    pthread_t threads[1];    int threadsN;    int rc;#endif    Log("=========BEGIN==================\n");#ifdef WIN32    _beginthread((void(__cdecl *)(void *))testThread,0,(void *)1);#else    threadsN=0;    rc=pthread_create(&(threads[threadsN++]),NULL,testThread,(void *)1);if (rc) Log("%d=pthread_create %d error!\n",rc,threadsN-1);#endif    i=0;    while (1) {        sleep_ms(100);        Log("in main:i==%d\n",++i);        if (No_Loop==1) break;//    }    Log("=========END====================\n");#ifdef WIN32    DeleteCriticalSection(&cs_log);#else    pthread_mutex_destroy(&cs_log);#endif    return 0;}//2012-06-14 16:27:21.500 =========BEGIN==================//2012-06-14 16:27:21.609 in main:i==1//2012-06-14 16:27:21.718 in main:i==2//2012-06-14 16:27:21.828 in main:i==3//2012-06-14 16:27:21.937 in main:i==4//2012-06-14 16:27:22.046 in main:i==5//2012-06-14 16:27:22.156 in main:i==6//2012-06-14 16:27:22.265 in main:i==7//2012-06-14 16:27:22.375 in main:i==8//2012-06-14 16:27:22.484 in main:i==9//2012-06-14 16:27:22.500 in testThread 1:i==1s//2012-06-14 16:27:22.593 in main:i==10//2012-06-14 16:27:22.703 in main:i==11//2012-06-14 16:27:22.812 in main:i==12//2012-06-14 16:27:22.921 in main:i==13//2012-06-14 16:27:23.031 in main:i==14//2012-06-14 16:27:23.140 in main:i==15//2012-06-14 16:27:23.250 in main:i==16//2012-06-14 16:27:23.359 in main:i==17//2012-06-14 16:27:23.468 in main:i==18//2012-06-14 16:27:23.500 in testThread 1:i==2s//2012-06-14 16:27:23.578 in main:i==19//2012-06-14 16:27:23.687 in main:i==20//2012-06-14 16:27:23.796 in main:i==21//2012-06-14 16:27:23.906 in main:i==22//2012-06-14 16:27:24.015 in main:i==23//2012-06-14 16:27:24.125 in main:i==24//2012-06-14 16:27:24.234 in main:i==25//2012-06-14 16:27:24.343 in main:i==26//2012-06-14 16:27:24.453 in main:i==27//2012-06-14 16:27:24.500 in testThread 1:i==3s//2012-06-14 16:27:24.562 in main:i==28//2012-06-14 16:27:24.671 in main:i==29//2012-06-14 16:27:24.781 in main:i==30//2012-06-14 16:27:24.890 in main:i==31//2012-06-14 16:27:25.000 in main:i==32//2012-06-14 16:27:25.109 in main:i==33//2012-06-14 16:27:25.218 in main:i==34//2012-06-14 16:27:25.328 in main:i==35//2012-06-14 16:27:25.437 in main:i==36//2012-06-14 16:27:25.500 in testThread 1:i==4s//2012-06-14 16:27:25.546 in main:i==37//2012-06-14 16:27:25.656 in main:i==38//2012-06-14 16:27:25.765 in main:i==39//2012-06-14 16:27:25.875 in main:i==40//2012-06-14 16:27:25.984 in main:i==41//2012-06-14 16:27:26.093 in main:i==42//2012-06-14 16:27:26.203 in main:i==43//2012-06-14 16:27:26.312 in main:i==44//2012-06-14 16:27:26.421 in main:i==45//2012-06-14 16:27:26.500 in testThread 1:i==5s//2012-06-14 16:27:26.531 in main:i==46//2012-06-14 16:27:26.531 =========END==================== 

热点排行