64,654
社区成员
发帖
与我相关
我的任务
分享
#include<Windows.h>
#include<stdio.h>
#define THREAD_MAX 3
//互斥锁
HANDLE hMutex1;
int nThreadCount = 0;
bool bSend = false;
void addThreadCount(){
WaitForSingleObject(hMutex1,INFINITE);
nThreadCount++;
printf("nThreadCount: %d\n", nThreadCount);
ReleaseMutex(hMutex1);
}
void subThreadCount(){
WaitForSingleObject(hMutex1,INFINITE);
printf("nThreadCount: %d\n", nThreadCount);
nThreadCount--;
ReleaseMutex(hMutex1);
}
void doSendData(LPVOID lpParamter){
WaitForSingleObject(hMutex1,INFINITE);
if(0 == nThreadCount && !bSend){
printf("Send Data: %d\n", (int)lpParamter);
bSend = true;
}
ReleaseMutex(hMutex1);
}
DWORD WINAPI doThread(LPVOID lpParamter)
{
//addThreadCount();
for(int i = 0; i < 5; i++)
{
printf("Running: 数据采集线程(%d)\n", (int)lpParamter);
Sleep(10);
}
//subThreadCount();
//doSendData(lpParamter);
}
int main()
{
//创建一个锁
hMutex1 =CreateMutex(NULL,FALSE,NULL);
bSend = false;
HANDLE handles[THREAD_MAX] = {0};
//创建线程
for(int i = 0; i < THREAD_MAX; i++){
handles[i] = CreateThread(NULL, 0, doThread, (LPVOID)(i + 1), 0, NULL);
}
WaitForMultipleObjects(THREAD_MAX, handles, FALSE, INFINITE);
printf("Send Data.\n");
for(int i = 0; i < THREAD_MAX; i++){
CloseHandle(handles[i]);
}
//while(1);
return 0;
}