当前位置: 首页>>代码示例>>C++>>正文


C++ WorkItem::function方法代码示例

本文整理汇总了C++中WorkItem::function方法的典型用法代码示例。如果您正苦于以下问题:C++ WorkItem::function方法的具体用法?C++ WorkItem::function怎么用?C++ WorkItem::function使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在WorkItem的用法示例。


在下文中一共展示了WorkItem::function方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: threadFunction

DWORD WINAPI Pool::threadFunction(void* context)
{
	DWORD currentThreadId = GetCurrentThreadId();
	//работаем пока хотим, что поток жил или не убиваем его
	printf("Thread: %d\n", currentThreadId);
	fflush(stdin);
	Pool *pool = (Pool*)context;

	while(true)
	{
		//выходим из потока, если ему повелел killer
		EnterCriticalSection(&pool->killCriticalSection);
		if (pool->killThreads->at(currentThreadId) == true)
		{
			LeaveCriticalSection(&pool->killCriticalSection);
			break;
		}
		LeaveCriticalSection(&pool->killCriticalSection);
		printf("Work thread: %d wait on semaphore\n", currentThreadId);
		//ждЄм пока нет новой задачи
		WaitForSingleObject(pool->semaphoreFreeThread, INFINITE);
		printf("Work thread: %d now was work\n", currentThreadId);
		//отмечаем, что поток начнЄт работать
		EnterCriticalSection(&pool->timeLifeCriticalSection);
		pool->handlersAndTime->at(currentThreadId) = SIGN_THREAD_NOW_WORK;
		LeaveCriticalSection(&pool->timeLifeCriticalSection);

		//атомарно получаем работу и удал¤ем еЄ из очереди
		//чтобы несколько потоко не выполн¤ли одно и тоже
		EnterCriticalSection(&pool->worksCriticalSection);
		WorkItem work = pool->queueWorks->back();
		pool->queueWorks->pop_back();
		LeaveCriticalSection(&pool->worksCriticalSection);

		//работаем
		work.function(work.context);

		//врем¤ когда поток перестал работать
		EnterCriticalSection(&pool->timeLifeCriticalSection);
		DWORD currentTime = GetTickCount();
		pool->handlersAndTime->at(currentThreadId) = currentTime;
		LeaveCriticalSection(&pool->timeLifeCriticalSection);
	}

	return 0;
}
开发者ID:vitiaaap29,项目名称:thread_pool_and_dll,代码行数:46,代码来源:Pool.cpp


注:本文中的WorkItem::function方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。