7月24日

来源:互联网 发布:linux怎么解压war包 编辑:程序博客网 时间:2024/05/01 20:14

线程练习

1.创建三个线程,线程1每隔1秒发送一个信号,奇数次线程2接收信号,偶数次线程3接收信号。

#include <Windows.h>DWORD WINAPI Thread1(LPVOID lpParam);DWORD WINAPI Thread2(LPVOID lpParam);DWORD WINAPI Thread3(LPVOID lpParam);HANDLE m_event,m_event2,m_event3;void _tmain(){DWORD dwthread1,dwthread2,dwthread3;m_event2 = CreateEvent(NULL,FALSE,TRUE,NULL);m_event3 = CreateEvent(NULL,FALSE,TRUE,NULL);CreateThread(NULL,0,Thread2,NULL,0,&dwthread2);CreateThread(NULL,0,Thread3,NULL,0,&dwthread3);CreateThread(NULL,0,Thread1,NULL,0,&dwthread1);while(1){}CloseHandle(m_event2);CloseHandle(m_event3);}DWORD WINAPI Thread1(LPVOID lpParam){int i;for (i = 0;i < 20;i++){if((i % 2) == 0){SetEvent(m_event2);}else{SetEvent(m_event3);}Sleep(1000);}return 0;}DWORD WINAPI Thread2(LPVOID lpParam){while(1){if(WaitForSingleObject(m_event2, INFINITE) == WAIT_OBJECT_0) {printf("this is the thread2\n");}}return 0;}DWORD WINAPI Thread3(LPVOID lpParam){while(1){if(WaitForSingleObject(m_event3, INFINITE) == WAIT_OBJECT_0) {printf("this is the thread3\n");}}return 0;}



2.创建两个线程,一个写线程,一个读线程,在写线程中奇数次和偶数次打印不同信息,没写一次,向读线程发出信号,读一次,读完后读线程再向写信号发出信号,在进行写,以此往复,一共执行20次。

#include <Windows.h>DWORD WINAPI writeThread(LPVOID lpParam);DWORD WINAPI readThread(LPVOID lpParam);HANDLE m_event,m_event2;typedef struct Data{char name[20];int age;}DATA;DATA data;void _tmain(){DWORD dwthread1,dwthread;m_event2 = CreateEvent(NULL,FALSE,TRUE,NULL);m_event = CreateEvent(NULL,FALSE,TRUE,NULL);CreateThread(NULL,0,writeThread,NULL,0,&dwthread);CreateThread(NULL,0,readThread,NULL,0,&dwthread1);while(1){}CloseHandle(m_event2);CloseHandle(m_event);}DWORD WINAPI writeThread(LPVOID lpParam){int i ;for (i = 0;i < 20;i++){if(WaitForSingleObject(m_event, INFINITE) == WAIT_OBJECT_0) {if ((i % 2) == 0){strcpy(data.name,"kiwin");data.age = 20;}else{strcpy(data.name,"susan");data.age = 22;}}SetEvent(m_event2);}return 0;}DWORD WINAPI readThread(LPVOID lpParam){for(int i =0;i<20;i++){if(WaitForSingleObject(m_event2, INFINITE) == WAIT_OBJECT_0) {printf("name is %s\n",data.name);printf("age is %d\n",data.age);}SetEvent(m_event);}return 0;}