多线程下读写vector变量

考虑到一个线程用于去读数据库,一次性插入多条数据到共享数据区,另外搞2个上的线程去读这个共享数据区,以后打算搞个线程池来处理读部分。

目下的问题是我想把这个共享数据区做成可变化的动态区,当读入数据大时,一次读入全部读完。当数据量小时,则在规范范围的空间中运行。

采用vector方式动态变化,比如要删除超过长度之外的设置,只需要earse就可以了,在线程中每次通过begin,end自动扫描处理中数据部分。

如果把线程部分放到dll中,那么考虑到如何读取共享数据区,采用导出函数方式,把主线程中的一个函数地址传入到dll中,然后在这个函数中通过

find_if(a.begin(),a.end(),myfunc)照样可以处理dll中跑线程的问题,之所以考虑用dll分离各个线程部分,是考虑到业务不同时,每个dll处理扫描共享数据区,发现自己的业务就去处理,不是则不理会,这样考虑设计可以通过编写dll方式来扩展不同的业务。

#include "stdafx.h"
#include 
#include 
#include 
#include 
#include 

using namespace std;

struct te
{
	int IsGet;
	int a1;
	int s1;
	char b1[20];
};

bool isget(te t)
{
	return t.IsGet ==1;
}
bool getdata(te t)
{
	return t.IsGet==0;
}
vector a; 
HANDLE hMutex;

void myprint(te t)
{ 
	cout<<"   ALL "<< (t.IsGet == 0? "Have": "No ")<< "("<::iterator p; 
	int i = 0;
	while (1)
	{  

		do{

			p = find_if(a.begin(), a.end(), isget);  
			if (p!= a.end())
			{      
				WaitForSingleObject(hMutex, INFINITE);
				i++;
				p->IsGet = 0; 
				p->s1 = i;
				sprintf(p->b1, "%s- %d", "thread_insert" , i); 
				cout<<" insert("<a1<<") " << p->s1<<"  " << p->b1 <::iterator p;

	while(1)
	{
		WaitForSingleObject(hMutex, INFINITE);
		p = find_if(a.begin(), a.end(), getdata);
		if (p != a.end())
		{   
			cout<<"("<< (char*)lpParam << ") get (" << p->a1<<") " << p->s1 <<" " << p->b1 <IsGet = 1;   
			p->s1 = 0;
			p->b1[0] = '\0';

		}  
		ReleaseMutex(hMutex);
		Sleep(500);
	}

	return 0;
}

int main(int argc, char* argv[])
{

	HANDLE hInsertHandle, hProcessHandle1,hProcessHandle2;
	DWORD dwThreadId;

	te tt1;
	for(int i = 0; i < 10;i++)
	{
		tt1.IsGet = 1;             //可以写入标志
		tt1.a1 = i;
		tt1.s1 = 0;
		sprintf(tt1.b1,"%d", i);
		a.push_back(tt1);
	}

	hMutex = CreateMutex(NULL, false, "mutex");

	hInsertHandle = CreateThread(
		NULL,                 
		0,                    
		insertdata,        
		NULL,                   // argument to thread function
		0,                           // use default creation flags
		&dwThreadId);

	hProcessHandle1 = CreateThread(  //读出线程1
		NULL,                 
		0,                    
		processdata,        
		"proc1" ,              
		0,                     
		&dwThreadId);
	hProcessHandle2 = CreateThread(
		NULL,                 
		0,                    
		processdata,        
		"proc2",            
		0,                  
		&dwThreadId);


	while(1)
	{ 
		printf("main thread ...\n");
		char c = getchar();
		if (c== 'q')
			break;
	}

	return 0;
}


你可能感兴趣的:(多线程下读写vector变量)