⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 线程写.txt

📁 通过课程设计
💻 TXT
字号:
#include "windows.h" 
#include <conio.h> 
#include <stdlib.h> 
#include <fstream.h> 
#include <io.h> 
#include <string.h> 
#include <stdio.h> 
#define PRODUCER 'P' //生产者 
#define CONSUMER 'C' //消费者 
#define INTE_PER_SEC 1000 //每秒时钟中断的数目 
#define MAX_THREAD_NUM 64 //最大线程数 
#define MAX_FILE_NUM 32 //最大文件数目数 
#define MAX_STR_LEN 32 //字符串的长度 
DWORD mutex; 
HANDLE h_Mutex; 
struct ThreadInfo 
{ 
int serial; //线程序号 
char entity; //线程类别(判断是生产者还是消费者线程) 
double delay; //线程延迟时间 
double persist; //线程读写操作时间 
}; 
/////////////////////////////////////////////////////////////////////////// 
//P:生产者线程信息 
void ProducerThread(void *p) 
{ 
//互斥变量 
h_Mutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex"); 
DWORD m_delay; //延迟时间 
DWORD m_persist; //读文件持续时间 
int m_serial; //线程序号 
// 从参数中获得信息 
m_serial=((ThreadInfo*)(p))->serial ; 
m_delay=(DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC); 
m_persist=(DWORD)(((ThreadInfo*)(p))->persist *INTE_PER_SEC); 
Sleep(m_delay); //延迟等待 
printf("生产者进程 %d 发出请求\n",m_serial); 
//等待互斥信号,保证访问,修改互斥 
mutex=WaitForSingleObject(h_Mutex,-1); 
printf("生产者线程 %d 开始往缓冲池放产品\n",m_serial,-1); 
Sleep(m_persist); 
printf("生产者 %d 成功放入产品!\n",m_serial); 
ReleaseMutex(h_Mutex); //释放互斥信号 

} 
///////////////////////////////////////////////////////////// 
//P:消费者线程信息 
void ConsumerThread(void *p) 
{ 
//互斥变量 
h_Mutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex"); 
DWORD m_delay; //延迟时间 
DWORD m_persist; //读文件持续时间 
int m_serial; //线程序号 
// 从参数中获得信息 
m_serial=((ThreadInfo*)(p))->serial ; 
m_delay=(DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC); 
m_persist=(DWORD)(((ThreadInfo*)(p))->persist *INTE_PER_SEC); 
Sleep(m_delay); //延迟等待 
printf("消费者 %d 发出请求\n",m_serial); 
//等待互斥信号,保证访问,修改互斥 
mutex=WaitForSingleObject(h_Mutex,-1); 
printf("消费者线程 %d 开始从缓冲池取产品\n",m_serial,-1); 
Sleep(m_persist); 
printf("消费者线程 %d 成功取走产品!\n",m_serial); 
ReleaseMutex(h_Mutex); //释放互斥信号 

}
问题补充:////////////////////////////////////////////////////////////// 
//file:文件名 
void ProducerandConsumer(char *file) 
{ 
DWORD n_thread=0; //线程数目 
DWORD thread_ID; //线程ID 
DWORD wait_for_all; //等待所有线程结束 
//互斥对象 
HANDLE h_Mutex; 
h_Mutex=CreateMutex(NULL,FALSE,"mutex"); 
//线程对象的数组 
HANDLE h_Thread[MAX_THREAD_NUM]; 
ThreadInfo thread_info[MAX_THREAD_NUM]; 
ifstream inFile; 
inFile.open (file); 
printf("生产者消费者问题:\n\n"); 
while(inFile) 
{ 
//读入信息 
inFile>>thread_info[n_thread].serial; 
inFile>>thread_info[n_thread].entity; 
inFile>>thread_info[n_thread].delay; 
inFile>>thread_info[n_thread++].persist; 
inFile.get(); 
} 

for(int i=0;i<(int)(n_thread);i++) 

{ 
if(thread_info[i].entity=='p') 
{ 
//创建生产线程 
h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(ProducerThread),&thread_info[i],0,&thread_ID); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -