多线程的两个视频文件行不通的错误

//server线程函数
unsigned int __stdcall ServerFun(PVOID pM)
{
	SetEvent(g_hEventBufferLeft);	
	sockte(IP, address);

	return 0;
}



//生产者线程函数
unsigned int __stdcall ProducerThreadFun(PVOID pM)
{
	unsigned char ch;
	int j = 0;
	int size;
	int Number = 1;
	FILE *fpCopy;

    point = (unsigned char*)malloc(sizeof(unsigned char)*804928);
	fp = fopen("6.avi", "rb");
	//首先保证文件中有流可以用来进行处理
	while(TRUE)
	{
		if((ch = fgetc(fp)) != EOF)
		{
			Sleep(100);
			/*for(j = 0; j < 100; j++)
			{
				fseek(fp, j, 0);
				ch = fgetc(fp);
				printf("\n%d\n", ch);
			}*/
			fseek(fp, 0, 0);
			size = filelength(fileno(fp));
			printf("%d", size);
			if(size > 82000)
			{
				break;
			}
			/*flag = TRUE;
			fclose(fp);
			break;*/
			//fread(s)
		}
	}
	while(TRUE)
	{
		//等待缓冲区为空
		WaitForSingleObject(g_hEventBufferLeft, INFINITE); 
		
		//互斥的访问缓冲区
		EnterCriticalSection(&g_cs);
		
		/*for(j = 0; j < CAPACITY; j++)
		{ 
			pFrame = cvQueryFrame(capture); 
			if(!pFrame) break;
			pFramesOne[j] = pFrame;
		}*/
		TEST = fopen(name1File, "r");
		if(!TEST)
			remove(name1File);

		//设置子文件
		if(size > 82000*Number)
		{
			fread(point , sizeof(ch), 82000, fp);
			fpCopy = fopen(nameFile, "ab");     //将其另保存为一个文件
			fseek(fpCopy, 0, SEEK_SET);
			fwrite(point, sizeof(ch), 82000, fpCopy);   //保存完成直接给压缩
			fclose(fpCopy);
			fseek(fp, 82000, 1);
		}
		_ldecod(argcCopy, argvCopy, nameFile, nameFileOut, referFile_1);
		Number++;
	

		LeaveCriticalSection(&g_cs);

		Sleep(50);
		SetEvent(g_hEventBufferLeftFull);

/*
unsigned int __stdcall ProducerThreadFun1(PVOID pM)
{
	int size;
	int Number = 2;

	fp = fopen("6.avi", "rb");
		while(TRUE)
		{
			WaitForSingleObject(g_hEventBufferRight, INFINITE); 
			
			EnterCriticalSection(&g_cs);*/
			/*while(TRUE)
			{
				size = filelength(fileno(fp));
				if(size > 82000*Number)
					break;
			}*/
		/*
			Number++;
			SetEvent(g_hEventBufferLeftFull);
		}*/

		WaitForSingleObject(g_hEventBufferRight, INFINITE);
	
		//互斥的访问缓冲区
		EnterCriticalSection(&g_cs1);
		
		TEST = fopen(nameFile, "r");     //将前一个文件清除
		if(TEST)
			remove("copy1.txt");
		//设置子文件
		if(size > 82000*Number)
		{
			fread(point , sizeof(ch), 82000, fp);
			fpCopy = fopen(name1File, "ab");     //将其另保存为一个文件
			fseek(fpCopy, 0, SEEK_SET);
			fwrite(point, sizeof(ch),82000, fpCopy);   //保存完成直接给压缩
			fclose(fpCopy);
			fseek(fp, 82000, 1);
		}

		_ldecod(argcCopy, argvCopy, nameFile, name1FileOut, referFile_2);
		Number++;
		LeaveCriticalSection(&g_cs1);

		Sleep(50);
		SetEvent(g_hEventBufferRightFull);
	}
	
	return 0;
}

//消费者线程函数
unsigned int __stdcall ConsumerThreadFun(PVOID pM)
{
	//volatile bool flag = TRUE;
	int i = 0;
	//cvNamedWindow("perFrame",1);
	//while(!flag);
	while(TRUE)
	{
			WaitForSingleObject(g_hEventBufferLeftFull, INFINITE);
			//等待缓冲区中有数据
			SetEvent(g_hEventBufferRight);
			
			//互斥的访问缓冲区
			EnterCriticalSection(&g_cs);
			//SetConsoleColor(FOREGROUND_GREEN);  //设置颜色
			//cout << "消费者取出数据" << g_Buffer;
			//SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  
			//for(i = 0; i < CAPACITY; i++)
			//{
			//	/*cvShowImage("perFrame", pFramesOne[i]);
			//	cvWaitKey(30);*/
			//}
			LeaveCriticalSection(&g_cs);
		
			Sleep(10);
			
			WaitForSingleObject(g_hEventBufferRightFull, INFINITE);
			//等待缓冲区中有数据
			SetEvent(g_hEventBufferLeft);

			//互斥的访问缓冲区
			EnterCriticalSection(&g_cs1);
			//SetConsoleColor(FOREGROUND_GREEN);  //设置颜色
			//cout << "消费者取出数据" << g_Buffer;
			//SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);  
	
			LeaveCriticalSection(&g_cs1);
	
			Sleep(10);
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值