c语言的单线程设置,C语言 单线程

C/C++ code#include

#include

#include

#ifdef WIN32

#include

#include

#include

#define MYVOID void

#else

#include

#include

#include

#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

#include

#include

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 WIN32

void Lock(CRITICAL_SECTION *l) {

EnterCriticalSection(l);

}

void Unlock(CRITICAL_SECTION *l) {

LeaveCriticalSection(l);

}

void sleep_ms(int ms) {

Sleep(ms);

}

#else

void 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);

}

#endif

void 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====================

你可能感兴趣的:(c语言的单线程设置)