亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? osthread.cpp

?? 本源碼為移動公司話費查詢中間件TUXEDO使用的實例
?? CPP
字號:
/*********************************************
	File:		OSThread.cpp

	date:       2001.7.25
	Contains:	Thread abstraction implementation

*********************************************/

#ifdef _WIN32
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "OSThread.h"
//#define  "./print_log/"

//
// OSThread.cpp
//
void*	OSThread::sMainThreadData = NULL;

UInt32	OSThread::sThreadStorageIndex = 0;
FILE *    OSThread::fb = 0;
#ifndef _WIN32
pthread_mutex_t OSThread::counter_mutex ;//PTHREAD_MUTEX_INITALIZER;
#else
HANDLE          OSThread::counter_mutex ;//PTHREAD_MUTEX_INITALIZER;
#endif

int OSThread::TOpen(char *pfn)
{
	if(fb != 0)
    	return 0;//(int)fb;
//	_mkdir("./print_log");
#ifndef _WIN32
	pthread_mutex_init (&counter_mutex,NULL);
#else
	counter_mutex = ::CreateMutex(NULL,FALSE,NULL);
#endif //_WIN32
	fb = fopen(pfn,"a+");
//	fseek(fb,0,2l);
	printf("Log file open success: Handle[%d]\n",(int)fb);

	return 0;

}

int OSThread::TWrite(char *pWrite,int nLen)
{
#ifndef _WIN32
	pthread_mutex_lock(&counter_mutex);
#else
	WaitForSingleObject(counter_mutex,INFINITE);

#endif //_WIN32
//	fprintf(fb,"%s",pWrite);
	fwrite(pWrite,nLen,1,fb);
#ifndef _WIN32
	pthread_mutex_unlock(&counter_mutex);
#else
	ReleaseMutex(counter_mutex);
#endif //_WIN32

	return 0;
}

int OSThread::TClose()
{
#ifndef _WIN32
	pthread_mutex_lock(&counter_mutex);
#else
	WaitForSingleObject(counter_mutex,INFINITE);
#endif //_WIN32
	fclose(fb);
#ifndef _WIN32
	pthread_mutex_unlock(&counter_mutex);
#else
	ReleaseMutex(counter_mutex);
#endif //_WIN32

	return 0;
}

void OSThread::Initialize()
{
#ifdef _WIN32
	sThreadStorageIndex = ::TlsAlloc();
	assert(sThreadStorageIndex >= 0);
#endif //_WIN32
}

OSThread::OSThread()
: 	fStopRequested(false),
	fRunning(false),
	fCancelThrown(false),
	fDetached(false),
	fJoined(false),
	fThreadData(NULL)
{
	fThreadID = 0;
}

OSThread::~OSThread()
{
	this->StopAndWaitForThread();
}

void OSThread::Start(Bool16 bJoin)
{
	unsigned long theId = 0; // We don't care about the identifier
//	fStopRequested = false;
	fRunning = false;
//	fCancelThrown = false;
	fDetached = false;
	fJoined = false;

#ifdef _WIN32
	if(fThreadID >0)
	{
		CloseHandle(fThreadID);
		fThreadID = 0;
	}
	fThreadID = (HANDLE)CreateThread(	NULL, 	// Inherit security
										0,		// Inherit stack size
										_Entry,	// Entry function
										(void*)this,	// Entry arg
										0,		// Begin executing immediately
										&theId );
#else
	if(bJoin)
	{
		pthread_attr_init(&attr);
		pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
		pthread_create(&fThreadID,&attr,_Entry,(void*) this);
	}
	else
		pthread_create(&fThreadID,0,_Entry,(void*) this);
#endif //_WIN32
	assert(fThreadID != 0);

	printf("線程ID = %d開始啟動\n",fThreadID);
}

void OSThread::StopAndWaitForThread()
{
	if (!fRunning)
		return;
		
	fStopRequested = true;
//	pthread_exit(NULL);
	if (!fJoined && !fDetached)
		Join();
}

void OSThread::Join()
{
	// What we're trying to do is allow the thread we want to delete to complete
	// running. So we wait for it to stop.
	assert(!fJoined && !fDetached);
	fJoined = true;
	UInt32 theErr = 0;

#ifdef _WIN32
	theErr = ::WaitForSingleObject(fThreadID, INFINITE);
#else
		theErr = pthread_join(fThreadID,NULL);
#endif //_WIN32
		fJoined = false;

	assert(theErr == 0);
}


void OSThread::Detach()
{
	assert(!fDetached && !fJoined);
	fDetached = true;
}

void OSThread::CheckForStopRequest()
{
	if (fStopRequested && !fCancelThrown)
		ThrowStopRequest();
}


void OSThread::ThrowStopRequest()
{
	if (fStopRequested && !fCancelThrown) {
		fCancelThrown = true;
		throw (0);
	}
}

void OSThread::CallEntry(OSThread* thread) 	// static method
{
	thread->fRunning = true;

	try
	{
		thread->Entry();
	} 
	catch(...)
	{
		printf("異常出錯,線程退出!ID = %d\n",thread->fThreadID);
	}

	thread->fRunning = false;
//by lyh edit 2001.10.19
//	if (thread->fDetached) {
//		assert(!thread->fJoined);
//	}
//end lyh
}

#ifdef _WIN32
	unsigned long WINAPI 
#else
	void*
#endif	
OSThread::_Entry(void* inThread)
{
	OSThread* theThread = (OSThread*)inThread;

	OSThread::CallEntry(theThread);
	return NULL;
}
/*
OSThread*	OSThread::GetCurrent()
{
	return (OSThread *)::TlsGetValue(sThreadStorageIndex);
}
*/
void OSThread::Entry()
{
	SInt64 timeout;
//	while(1)
//	{
//		try{
			timeout = this->Run();
//			if(timeout !=0)
//				break;        //退出線程
//		}
//		catch(...){
//			return ;
//		}
//	}
	printf("線程正常退出 ID = %d\n",fThreadID);
}

int	OSThread::GetErrno()
{
	return 0;
/*
	int winErr = ::GetLastError();
	return winErr;

	
	// Convert to a POSIX errorcode. The *major* assumption is that
	// the meaning of these codes is 1-1 and each Winsock, etc, etc
	// function is equivalent in errors to the POSIX standard. This is 
	// a big assumption, but the server only checks for a small subset of
	// the real errors, on only a small number of functions, so this is probably ok.
	switch (winErr)
	{

//		case ERROR_FILE_NOT_FOUND: return ENOENT;

//		case ERROR_PATH_NOT_FOUND: return ENOENT;		




		case WSAEINTR:		return EINTR;
		case WSAENETRESET:	return EPIPE;
		case WSAENOTCONN:	return ENOTCONN;
		case WSAEWOULDBLOCK:return EAGAIN;
		case WSAECONNRESET:	return EPIPE;
//		case WSAEADDRINUSE:	return EADDRINUSE;
//		case WSAEMFILE:		return EMFILE;
		case WSAEINPROGRESS:return EINPROGRESS;
//		case WSAEADDRNOTAVAIL: return EADDRNOTAVAIL;
		case WSAECONNABORTED: return EPIPE;
		case 0:				return 0;
		
		default: 			return ENOTCONN;
	}
*/
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
eeuss鲁片一区二区三区| 国产精品一区二区三区四区 | 亚洲欧美另类小说| 午夜精品aaa| 热久久久久久久| 秋霞电影网一区二区| 精品在线观看视频| 国产精品一区一区| 91天堂素人约啪| 欧美综合久久久| 欧美精品乱码久久久久久| 日韩三级av在线播放| 久久一留热品黄| 国产精品国产三级国产aⅴ原创 | 国产一区二区三区蝌蚪| 国产自产v一区二区三区c| 国产精品自拍在线| 一本色道综合亚洲| 91精品国产一区二区三区| 精品国产亚洲一区二区三区在线观看 | 美国欧美日韩国产在线播放| 九色porny丨国产精品| 成人午夜视频网站| 欧美日韩视频不卡| 久久精品人人做| 亚洲与欧洲av电影| 韩国女主播成人在线| 色婷婷av一区二区三区软件| 日韩一级免费观看| ●精品国产综合乱码久久久久| 亚洲四区在线观看| 精品一区二区三区免费| 99久久亚洲一区二区三区青草| 欧美日韩国产精选| 国产精品天干天干在线综合| 午夜激情久久久| 成人av高清在线| 欧美成人性福生活免费看| 国产乱理伦片在线观看夜一区 | 欧美天天综合网| 2023国产精品自拍| 午夜精品成人在线视频| 成人av高清在线| 久久综合五月天婷婷伊人| 一区二区国产视频| 成人高清视频在线观看| 精品国产乱码久久久久久浪潮| 亚洲欧洲中文日韩久久av乱码| 国产一区二区在线观看免费| 色偷偷成人一区二区三区91| 国产亚洲精品超碰| 日本不卡在线视频| 91国产视频在线观看| 国产亲近乱来精品视频| 久久精品二区亚洲w码| 欧美日韩视频在线一区二区| 国产精品视频看| 国产剧情在线观看一区二区| 3d成人h动漫网站入口| 亚洲一区二区不卡免费| 在线视频国内一区二区| 最新中文字幕一区二区三区| 懂色av一区二区三区蜜臀 | 国产精品一区二区91| 日韩一区二区三区四区| 日韩电影免费在线看| 欧美精品自拍偷拍动漫精品| 亚洲伊人伊色伊影伊综合网| 欧美亚洲图片小说| 亚洲伊人色欲综合网| 欧美视频完全免费看| 一区二区三区久久| 欧美人成免费网站| 日本亚洲最大的色成网站www| 欧美日韩视频一区二区| 日韩精品色哟哟| 日韩一级片在线播放| 精品在线观看视频| 国产视频一区在线观看| 成人午夜免费电影| 亚洲特黄一级片| 欧美性一级生活| 青娱乐精品视频| 久久久精品一品道一区| 成人aaaa免费全部观看| 亚洲精品欧美专区| 91精品在线观看入口| 狠狠色综合日日| 国产精品国产精品国产专区不蜜| 99re成人精品视频| 性欧美疯狂xxxxbbbb| 日韩一区二区麻豆国产| 国产二区国产一区在线观看| 国产精品久久久久精k8| 欧美日韩黄色一区二区| 一本色道亚洲精品aⅴ| 日本不卡1234视频| 日本一区二区三区久久久久久久久不| 丰满亚洲少妇av| 亚洲图片欧美色图| 日韩免费电影网站| bt欧美亚洲午夜电影天堂| 亚洲6080在线| 国产精品欧美综合在线| 精品视频在线免费观看| 国产一区在线看| 亚洲成在人线免费| 日本一区二区久久| 日韩视频在线你懂得| 99久久伊人精品| 黄色精品一二区| 亚洲自拍偷拍图区| 中文欧美字幕免费| 欧美一级二级三级蜜桃| 91啪亚洲精品| 国产尤物一区二区| 日本美女一区二区三区视频| 国产精品久99| 久久久影视传媒| 日韩一区二区麻豆国产| 91麻豆免费视频| 丰满白嫩尤物一区二区| 蜜臀久久99精品久久久久宅男| 中文字幕一区二区三区四区不卡 | 亚洲不卡av一区二区三区| 国产午夜精品福利| 欧美精品免费视频| 91极品美女在线| 99久久久国产精品| 成人小视频在线| 国产乱码精品一区二区三 | 亚洲人123区| 亚洲国产成人私人影院tom| 精品奇米国产一区二区三区| 欧美疯狂做受xxxx富婆| 91色porny在线视频| 不卡的看片网站| 成人午夜免费电影| 国产99久久久国产精品| 国内久久婷婷综合| 狠狠狠色丁香婷婷综合久久五月| 日韩成人免费电影| 奇米精品一区二区三区在线观看一| 亚洲一二三级电影| 亚洲第一会所有码转帖| 亚洲一区二区视频在线观看| 一区二区三区久久| 亚洲成人精品影院| 日韩中文字幕亚洲一区二区va在线| 亚洲福利视频导航| 日韩av在线发布| 久久精品免费看| 国内外成人在线| 丁香亚洲综合激情啪啪综合| 粗大黑人巨茎大战欧美成人| 91麻豆精品国产91久久久资源速度 | 日韩av成人高清| 日韩精品免费专区| 蜜桃视频一区二区| 国内不卡的二区三区中文字幕 | 欧美日韩免费电影| 69精品人人人人| 欧美成人精品二区三区99精品| 精品久久久久久无| 国产精品久久久久婷婷| 亚洲欧美色一区| 日韩在线a电影| 韩国理伦片一区二区三区在线播放| 国模一区二区三区白浆| 福利电影一区二区三区| 91高清视频在线| 日韩免费高清电影| 国产精品乱人伦中文| 亚洲午夜精品久久久久久久久| 午夜欧美在线一二页| 国内不卡的二区三区中文字幕| www.久久精品| 在线电影一区二区三区| 久久人人超碰精品| 一区二区三区在线观看视频| 日韩av电影免费观看高清完整版 | 欧美一卡二卡三卡四卡| 国产欧美一区二区在线观看| 亚洲欧美日韩精品久久久久| 日韩电影免费在线观看网站| 国产美女视频91| 欧美日韩高清不卡| 国产午夜一区二区三区| 亚洲国产精品麻豆| 高清不卡在线观看| 欧美一区永久视频免费观看| 亚洲欧洲日韩一区二区三区| 日本系列欧美系列| 日本久久精品电影| 国产日韩欧美一区二区三区综合| 偷窥少妇高潮呻吟av久久免费| 成年人午夜久久久| 精品国产乱码91久久久久久网站| 亚洲一区二区三区四区在线免费观看 | 日本精品视频一区二区|