15,471
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <stdio.h>
#include <windows.h>
using namespace std;
struct ExDataType
{
int id;
double value;
};
#define UM_DATA_ACQUIRE (WM_USER + 1001)
class A
{
public:
A();
void Update();
void Show();
private:
DWORD WINAPI ThreadFunc(LPVOID para);
ExDataType m_data;
};
A::A()
{
m_data.id = 0;
m_data.value = 0.0;
DWORD dwValue = GetCurrentThreadId();
HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, &dwValue, 0, NULL);
if (!hThread)
{
std::cout << "error\r\n";
exit(-1);
}
//CloseHandle(hThread);
}
void A::Update()
{
MSG msg;
ExDataType *pTmp = NULL;
while(GetMessage(&msg, NULL, 0, 0))
{
pTmp = (ExDataType *)(msg.wParam);
switch(msg.message)
{
case UM_DATA_ACQUIRE:
m_data.id = pTmp->id;
m_data.value = pTmp->value;
break;
default:
break;
}
}
}
void A::Show()
{
std::cout << "m_data.id: " << m_data.id << "\tm_data.value: " << m_data.value << "\r\n";
}
DWORD WINAPI A::ThreadFunc(LPVOID para)
{
DWORD dwThreadId = *((DWORD *)para);
ExDataType threadData = {0, 0.0};
while(TRUE)
{
threadData.id += 2;
threadData.value += 2.2;
PostThreadMessage(dwThreadId, UM_DATA_ACQUIRE, (WPARAM)(&threadData), (LPARAM)0);
Sleep(5000);
}
return 0;
}
int main()
{
A a;
a.Show();
return 0;
}
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <ctime>
using namespace std;
#define UM_DATA_ACQUIRE (WM_USER + 1001)
struct ExDataType
{
int id;
double value;
};
DWORD WINAPI ThreadFunc(LPVOID para);
class A
{
public:
A();
void Update();
void Show();
private:
ExDataType m_data;
};
A::A()
{
m_data.id = 1;
m_data.value = 1.1;
DWORD dwValue = GetCurrentThreadId();
HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, &dwValue, 0, NULL);
if (!hThread)
{
std::cout << "error\r\n";
exit(-1);
}
CloseHandle(hThread);
}
void A::Update()
{
MSG msg;
ExDataType *pTmp = NULL;
while(GetMessage(&msg, NULL, 0, 0))
{
pTmp = (ExDataType *)(msg.wParam);
switch(msg.message)
{
case UM_DATA_ACQUIRE:
m_data.id = pTmp->id;
m_data.value = pTmp->value;
break;
default:
break;
}
}
}
void A::Show()
{
std::cout << "m_data.id: " << m_data.id << "\tm_data.value: " << m_data.value << "\r\n";
}
DWORD WINAPI ThreadFunc(LPVOID para)
{
DWORD dwThreadId = *(DWORD *)para;
ExDataType threadData = {0, 0.0};
BOOL ret;
while(TRUE)
{
threadData.id += 2;
threadData.value += 2.2;
ret = PostThreadMessage(dwThreadId, UM_DATA_ACQUIRE, (WPARAM)(&threadData), (LPARAM)0);
Sleep(1000);
}
return 0;
}
int main()
{
A a;
int count = 0;
while (5 > count++)
{
a.Show();
Sleep(1000);
}
return 0;
}
#include <iostream>
using namespace std;
#include <stdio.h>
#include <windows.h>
#define UM_DATA_GET (WM_USER + 1001)
struct ExDataType
{
int id;
double value;
};
DWORD WINAPI Thread_Update(LPVOID para);
DWORD WINAPI Thread_GetData(LPVOID para);
CRITICAL_SECTION g_cs;
class A
{
public:
A();
void Show();
private:
DWORD m_threadID;
ExDataType m_data;
};
A::A() : m_threadID(0)
{
m_data.id = 1;
m_data.value = 1.1;
HANDLE hThread_Update = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Thread_Update, (LPVOID)(&m_data), 0, &m_threadID);
if (!hThread_Update)
{
std::cout << "error 1\r\n";
exit(-1);
}
CloseHandle(hThread_Update);
HANDLE hThread_GetData = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Thread_GetData, (LPVOID)(&m_threadID), 0, NULL);
if (!hThread_GetData)
{
std::cout << "error 2\r\n";
exit(-2);
}
CloseHandle(hThread_GetData);
}
void A::Show()
{
EnterCriticalSection(&g_cs);
std::cout << "m_data.id: " << m_data.id << "\tm_data.value: " << m_data.value << "\r\n";
LeaveCriticalSection(&g_cs);
}
DWORD WINAPI Thread_GetData(LPVOID para)
{
DWORD dwThreadId = *(DWORD *)para;
ExDataType threadData = {0, 0.0};
BOOL ret;
while(TRUE)
{
threadData.id += 2;
threadData.value += 2.2;
ret = PostThreadMessage(dwThreadId, UM_DATA_GET, (WPARAM)(&threadData), (LPARAM)0);
Sleep(1000);
}
return 0;
}
DWORD WINAPI Thread_Update(LPVOID para)
{
ExDataType data = *(ExDataType *)para;
MSG msg;
ExDataType *pTmp = NULL;
while(TRUE)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) /* GetMessage(&msg, NULL, 0, 0) */
{
EnterCriticalSection(&g_cs);
pTmp = (ExDataType *)(msg.wParam);
switch(msg.message)
{
case UM_DATA_GET:
data.id = pTmp->id;
data.value = pTmp->value;
break;
default:
break;
}
LeaveCriticalSection(&g_cs);
}
}
return 0;
}
int main()
{
InitializeCriticalSection(&g_cs);
A a;
int count = 0;
while (5 > count++)
{
a.Show();
Sleep(1000);
}
DeleteCriticalSection(&g_cs);
return 0;
}