小白求助,应该如何写出一个优雅的线程蓝图?

St  K猫 2021-04-02 03:53:21
说明:某码农在写UE4蓝图的过程中发生了一件神奇的事,在接受了一坨端口传输的数据之后,竟然悲催地不能编译!!!
代码如下(省略串口调用):
h:
UCLASS()
class MYPJT_API UmainBP : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
UFUNCTION(BlueprintCallable, BlueprintPure, Category = Game)
static FString BodyTurn
(
FString& LX_uparm,
FString& LY_uparm,
FString& LZ_uparm,
FString& LZ_lowarm,
FString& LX_hand,
FString& LY_hand,
FString& RX_uparm,
FString& RY_uparm,
FString& RZ_uparm,
FString& RZ_lowarm,
FString& RX_hand,
FString& RY_hand
);
};

cpp:
String UmainBP::BodyTurn(
FString& LX_uparm,
FString& LY_uparm,
FString& LZ_uparm,
FString& LZ_lowarm,
FString& LX_hand,
FString& LY_hand,
FString& RX_uparm,
FString& RY_uparm,
FString& RZ_uparm,
FString& RZ_lowarm,
FString& RX_hand,
FString& RY_hand
)

{
int32_t wTempList[20] = { 0 }, i = 0;
HANDLE hCom1 = init_com("COM3");
char readBuf[1000] = { 0 }, bufTemp1[1024] = { 0 }, bufTemp2[1024] = { 0 };
DWORD readsize;
int n = 2;
string str = "";
int index = 0;
while (n--) {
ReadFile(hCom1, readBuf, 256, &readsize, NULL);
str += readBuf;
memset(readBuf, 0, sizeof(readBuf));
index = str.find('\n');
if (index < 0) {}
else if (index == 113)
{
string p = str.substr(0, index + 1);

if (p[0] == ':' && p[113] == '\n')
{
for (i = 0; i < 14; i++)
{
wTempList[i] = strtoul(p.substr(i * 8 + 1, 8).c_str(), NULL, 16);
}
uint32_t crcData = wTempList[13];
uint32_t crcRes = crc32_in_c(0, (uint8_t*)wTempList, 52);

}
index = 0;
float lz_uparm = 180*wTempList[1]/32768;
float ly_uparm = 180*wTempList[2]/32768;
float lx_uparm = 180*wTempList[3]/32768;
float lz_lowarm = 180*wTempList[4]/32768;
float lx_hand = 180*wTempList[5]/32768;
float ly_hand = 180*wTempList[6]/32768;
float rz_uparm = 180*wTempList[7]/32768;
float ry_uparm = 180*wTempList[8]/32768;
float rx_uparm = 180*wTempList[9]/32768;
float rz_lowarm = 180*wTempList[10]/32768;
float rx_hand = 180*wTempList[11]/32768;
float ry_hand = 180*wTempList[12]/32768;
LZ_uparm = FString::SanitizeFloat(lz_uparm);
LY_uparm = FString::SanitizeFloat(ly_uparm);
LX_uparm = FString::SanitizeFloat(lx_uparm);
LZ_lowarm = FString::SanitizeFloat(lz_lowarm);
LX_hand = FString::SanitizeFloat(lx_hand);
LY_hand = FString::SanitizeFloat(ly_hand);
RZ_uparm = FString::SanitizeFloat(rz_uparm);
RY_uparm = FString::SanitizeFloat(ry_uparm);
RX_uparm = FString::SanitizeFloat(rx_uparm);
RZ_lowarm = FString::SanitizeFloat(rz_lowarm);
RX_hand = FString::SanitizeFloat(rx_hand);
RY_hand = FString::SanitizeFloat(ry_hand);

}
else
{
str.erase(0, index + 1);
LZ_uparm = "0";
LY_uparm = "0";
LX_uparm = "0";
LZ_lowarm = "0";
LX_hand = "0";
LY_hand = "0";
RZ_uparm = "0";
RY_uparm = "0";
RX_uparm = "0";
RZ_lowarm = "0";
RX_hand = "0";
RY_hand = "0";

}
}
return "0";
}

于是在加载UE4,编译动画蓝图后,发生了以下悲剧:

求问诸位大神,这个不能运行由不报错的多线程安全该怎么破?
...全文
1078 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

456

社区成员

发帖
与我相关
我的任务
社区描述
其它游戏引擎
社区管理员
  • 其它游戏引擎社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧