C语言学习记录之——单线程非阻塞延时
#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;}}}
#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====================