105 lines
1.8 KiB
C
105 lines
1.8 KiB
C
#include "erpc_core.h"
|
|
|
|
#include <windows.h>
|
|
#include <stdio.h>
|
|
|
|
HANDLE hMutex;
|
|
|
|
static void lock()
|
|
{
|
|
WaitForSingleObject(hMutex, INFINITE);
|
|
}
|
|
|
|
static void unlock()
|
|
{
|
|
ReleaseMutex(hMutex);
|
|
}
|
|
static void sleep(u32 ms)
|
|
{
|
|
Sleep(ms);
|
|
}
|
|
extern erpc_hw_t port_self;
|
|
static u32 erpc_send(u8 *data, u16 len)
|
|
{
|
|
write_rec_cache(&port_self,data,len);
|
|
}
|
|
erpc_hw_t port_self = {
|
|
.lock = lock,
|
|
.unlock = unlock,
|
|
.sleep = sleep,
|
|
.local_id = 0x12,
|
|
.send = erpc_send,
|
|
};
|
|
|
|
|
|
static void test1(){
|
|
|
|
}
|
|
DWORD WINAPI fun(LPVOID lpParam)
|
|
{
|
|
UNUSED(lpParam);
|
|
while (1)
|
|
{
|
|
Sleep(1000);
|
|
}
|
|
}
|
|
DWORD WINAPI send_thread(LPVOID lpParam)
|
|
{
|
|
UNUSED(lpParam);
|
|
while (1)
|
|
{
|
|
send_core(&port_self);
|
|
Sleep(1);
|
|
}
|
|
}
|
|
DWORD WINAPI recv_thread(LPVOID lpParam)
|
|
{
|
|
UNUSED(lpParam);
|
|
while (1)
|
|
{
|
|
recv_core(&port_self);
|
|
Sleep(1);
|
|
}
|
|
}
|
|
|
|
DWORD WINAPI recv_handle_thread(LPVOID lpParam)
|
|
{
|
|
UNUSED(lpParam);
|
|
while (1)
|
|
{
|
|
recv_handle(&port_self);
|
|
Sleep(1);
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
hMutex = CreateMutex(NULL, FALSE, TEXT("MyMutex"));
|
|
|
|
if (hMutex == NULL)
|
|
{
|
|
printf("CreateMutex error: %d\n", GetLastError());
|
|
return 1;
|
|
}
|
|
|
|
HANDLE hThreads[4];
|
|
|
|
hThreads[0] = CreateThread(NULL, 0, fun, NULL, 0, NULL);
|
|
hThreads[1] = CreateThread(NULL, 0, send_thread, NULL, 0, NULL);
|
|
hThreads[2] = CreateThread(NULL, 0, recv_thread, NULL, 0, NULL);
|
|
hThreads[3] = CreateThread(NULL, 0, recv_handle_thread, NULL, 0, NULL);
|
|
// 等待所有线程完成
|
|
WaitForMultipleObjects(4, hThreads, TRUE, INFINITE);
|
|
|
|
// 关闭线程句柄
|
|
for (int i = 0; i < 4; i++)
|
|
{
|
|
CloseHandle(hThreads[i]);
|
|
}
|
|
|
|
// 关闭Mutex句柄
|
|
CloseHandle(hMutex);
|
|
|
|
return 0;
|
|
}
|