DWORD WINAPI ThreadFunc(LPVOID lpParam) //解码 { start: HWND hWnd = (HWND)lpParam; // CArinc429MHUDDlg * pTaskMain = (CArinc429MHUDDlg *) lpParam; DWORD d = 0; BYTE chno = 0; ///设置通道1为接受 BYTE btTriggerLevel = 0; int i = 0; #ifndef CARD_DEBUG while (isNeedThread) ////////////////// { // Get trigger level btTriggerLevel = stTriggerLevel.Chan0Depth_I; // Rx channel 1~CHNO_RMAX // ---------------------------------------------------------------- if (btTriggerLevel > 0) // triggered//xu yao guo lv { if (IsFIFOTriggered_R(hCard, chno))//判断是否到达触发深度 { EnablReadFIFO(hCard, chno);//使能读FIFO数据 while ((ReadFIFOStatus_R(hCard, chno) != FIFOEmpty) && (ReadFIFOStatus_R(hCard, chno) != FIFOError)) //当recieveFIFO 不空且不溢出时 { d = ReceiveData(hCard, chno); if ((wdMode == C429_SELFTEST) && (stComm[chno / 2].iSelParity == C429_PARITY_NONE)) // resume 429 Word { d = Resume429Word(d);//429字转化计算机字,解码 } Save_ReceiveData(d, ReceiveData_Vector + i); } DisablReadFIFO(hCard);//禁止读FIFO数据 } } else // untriggered//不需要过滤 . { if ((ReadFIFOStatus_R(hCard, chno) != FIFOEmpty) && (ReadFIFOStatus_R(hCard, chno) != FIFOError))//读取状态当recieveFIFO 不空且不溢出时 { EnablReadFIFO(hCard, chno);//使能读FIFO数据 d = ReceiveData(hCard, chno); if ((wdMode == C429_SELFTEST) && (stComm[chno / 2].iSelParity == C429_PARITY_NONE)) // resume 429 Word { d = Resume429Word(d); } DWORD temp; temp = d & 0x00FF; short s; switch (temp)
时间: 2023-06-18 14:03:26 浏览: 49
这段代码看起来是一个线程函数,用于解码 ARINC429 数据。在函数开头,使用 lpParam 参数获取窗口句柄 hWnd,并将它转换为 CArinc429MHUDDlg 对象指针 pTaskMain。然后,定义了一些变量,包括通道号 chno、触发深度 btTriggerLevel、计数器 i 和数据 d。
在函数主体内部,首先判断是否需要触发。如果需要触发且 FIFO 到达触发深度,就使能读取 FIFO 数据并将数据保存到 ReceiveData_Vector 中。如果不需要触发,则直接读取 FIFO 数据并保存到 ReceiveData_Vector 中。
最后,代码中还有一段 switch 语句,根据 d 的最低字节 temp,执行不同的操作。
相关问题
DWORD WINAPI ThreadFunc(LPVOID lpParam)里面的lpcoid怎么用
在 `DWORD WINAPI ThreadFunc(LPVOID lpParam)` 函数中,`lpParam` 参数是一个 `LPVOID` 类型的指针,它可以用于传递任意类型的数据给线程函数。
在使用 `lpParam` 参数时,需要进行类型转换。通常情况下,可以将 `lpParam` 转换为所需的类型,并解引用该指针来获取传递给线程函数的实际数据。
以下是一个示例,展示了如何使用 `lpParam` 参数:
```cpp
#include <windows.h>
DWORD WINAPI ThreadFunc(LPVOID lpParam) {
int* pValue = static_cast<int*>(lpParam); // 将 lpParam 转换为 int* 类型
int value = *pValue; // 解引用指针获取实际数据
// 使用 value 进行后续操作
return 0;
}
int main() {
int data = 42;
HANDLE hThread = CreateThread(NULL, 0, &ThreadFunc, &data, 0, NULL);
if (hThread != NULL) {
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
}
return 0;
}
```
在上面的示例中,我们将一个整数值 `data` 的地址传递给了线程函数 `ThreadFunc`,然后在函数中通过将 `lpParam` 转换为 `int*` 类型,并解引用该指针来获取实际的整数值。你可以根据实际情况将 `lpParam` 转换为不同的指针类型,并使用其中的数据。
DWORD WINAPI send_MSG(LPVOID lpParam);作用
这是一个函数声明,它定义了一个名为 send_MSG 的函数,该函数的返回值类型为 DWORD,参数类型为 LPVOID。在 Windows 操作系统中,DWORD 是一个 32 位无符号整数类型,LPVOID 是一个指向任意类型数据的指针类型。
该函数通常作为线程函数使用,用于发送消息。在函数内部,可以通过参数 lpParam 获取传递给线程的数据。该函数执行完毕后,会返回一个 DWORD 类型的值作为线程的退出代码。