LPVOID lpParameter



多线程编程当中

DWORD WINAPI fThread1(LPVOID lpParameter){

是为了在hThread1 = CreateThread(NULL, 0, fThread1, NULL, 0, NULL);中使用

#include<iostream> #include<Windows.h> #include <iomanip> #include <math.h> using namespace std; float x=0; DWORD WINAPI Thread1(LPVOID lpParameter); DWORD WINAPI Thread2(LPVOID lpParameter); void f1() { int i=10; while(i--) cout<<"i="<<i<<endl; } void f2() { int j=20; while(j--) cout<<"j="<<j<<endl; } int main() { cout<<"主线程已启动"<<endl; //f1(); //f2(); HANDLE hThread1=CreateThread(NULL,0,Thread1,NULL,0,NULL);//启动线程1 HANDLE hThread2=CreateThread(NULL,0,Thread2,NULL,0,NULL);//启动线程2 CloseHandle(hThread1);//关闭线程1 CloseHandle(hThread2);//关闭线程2 int i=25; while(i--) { cout<<"主线程运行中"<<endl; Sleep(100);//延时0.1s } //CloseHandle(hThread1);//关闭线程1 //CloseHandle(hThread2);//关闭线程2 system("pause");//暂停防止程序退出 return 0; } DWORD WINAPI Thread1(LPVOID lpParameter) { // cout<<"线程1已启动"<<endl; // //int i=5; // //while(i--) // //{ // //cout<<"线程1运行中"<<endl; //cout<<"i1="<<i<<endl; //Sleep(100);//延时0.1s // //} int i=0; while(i<101) { x=x+0.02; i++; Sleep(100);//延时0.1s } return 0; } DWORD WINAPI Thread2(LPVOID lpParameter) { // cout<<"线程2已启动"<<endl; // //int i=100; // //while(i--) // //{ // //cout<<"线程2运行中"<<endl; ////cout<<setw(i*10)<<"*"<<endl; //cout<<"i2="<<i<<endl; //Sleep(100);//延时0.1s // //} int i=0; while(x<=2.0) { //cout<<setw(30*sin(x))<<"*"<<endl; cout<<x<<endl; Sleep(100);//延时0.1s } return 0; }在所给线程代码的基础上,修改: (1)一个线程负责数的变化,从0变到4*3.14159,步长为0.02; (2)一个线程负责读取系统时间; (3)一个线程负责将数的正弦、余弦与正要值计算并显示,同时显示系统时间; (4)步长停顿100ms。 要求:用console程序。
05-30
分析代码的数据结构:#include <stdio.h> #include <stdlib.h> #include <Windows.h> #define MAX_READERS 5 #define MAX_WRITERS 3 /* 定义读者优先信号量 */ HANDLE readerSemaphore; /* 定义写者优先信号量 */ HANDLE writerSemaphore; /* 定义读者计数器 */ int readerCount = 0; /* 定义写者计数器 */ int writerCount = 0; /* 定义读者互斥锁 */ CRITICAL_SECTION readerMutex; /* 定义写者互斥锁 */ CRITICAL_SECTION writerMutex; /* 定义共享资源 */ int sharedResource = 0; /* 读者线程函数 */ DWORD WINAPI ReaderThread(LPVOID lpParameter) { while (1) { WaitForSingleObject(readerSemaphore, INFINITE); EnterCriticalSection(&readerMutex); readerCount++; if (readerCount == 1) { WaitForSingleObject(writerSemaphore, INFINITE); } LeaveCriticalSection(&readerMutex); ReleaseSemaphore(readerSemaphore, 1, NULL); /* 读共享资源 */ printf("Reader %d read shared resource: %d\n", lpParameter, sharedResource); EnterCriticalSection(&readerMutex); readerCount--; if (readerCount == 0) { ReleaseSemaphore(writerSemaphore, 1, NULL); } LeaveCriticalSection(&readerMutex); /* 等待一段时间 */ Sleep(rand() % 1000); } } /* 写者线程函数 */ DWORD WINAPI WriterThread(LPVOID lpParameter) { while (1) { WaitForSingleObject(&writerMutex, INFINITE); writerCount++; if (writerCount == 1) { WaitForSingleObject(readerSemaphore, INFINITE); } LeaveCriticalSection(&writerMutex); /* 写共享资源 */ sharedResource++; printf("Writer %d wrote shared resource: %d\n", lpParameter, sharedResource); EnterCriticalSection(&writerMutex); writerCount--; if (writerCount == 0) { ReleaseSemaphore(readerSemaphore, 1, NULL); } LeaveCriticalSection(&writerMutex); /* 等待一段时间 */ Sleep(rand() % 1000); } } int main() { /* 初始化互斥锁和信号量 */ InitializeCriticalSection(&readerMutex); InitializeCriticalSection(&writerMutex);
最新发布
06-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值