The sdk should not be used in multi thread applications?
here is the code below:
// HumanFollower.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h”
#include <astra/astra.hpp>
#include <windows.h>
#pragma comment(lib,“astra.lib”)
#pragma comment(lib,“astra_core.lib”)
#pragma comment(lib,“astra_core_api.lib”)
class DetectListener : public astra::FrameListener
{
public:
virtual void on_frame_ready(astra::StreamReader& reader,
astra::Frame& frame) override
{
processBodies(frame);
}
protected:
void processBodies(astra::Frame& frame)
{
astra::BodyFrame bodyFrame = frame.get<astra::BodyFrame>();
if (!bodyFrame.is_valid())
{
return;
}
const auto& bodies = bodyFrame.bodies();
//身体数据,但是有bodyid
for (auto& body : bodies)
{
auto ptCOM = body.center_of_mass();
printf(" body %d center of mass: x: %d , y: %d , z: %d\n",
body.id(), int(ptCOM.x), int(ptCOM.y), int(ptCOM.z));
// if (NULL != m_pEvt)
// {
// m_pEvt->UserTracked(body.id(), ptCOM);
// }
}
}
};
astra::DepthStream configure_depth(astra::StreamReader& reader)
{
auto depthStream = reader.streamastra::DepthStream();
//We don't have to set the mode to start the stream, but if you want to here is how:
astra::ImageStreamMode bodyMode;
bodyMode.set_width(160);
bodyMode.set_height(120);
bodyMode.set_pixel_format(astra_pixel_formats::ASTRA_PIXEL_FORMAT_DEPTH_MM);
bodyMode.set_fps(30);
depthStream.set_mode(bodyMode);
return depthStream;
}
#include <conio.h>
astra::StreamSet streamSet;
astra::StreamReader reader;
DetectListener listener;
HANDLE hDetectThread = INVALID_HANDLE_VALUE;
void DetectThread(LPVOID pVoid)
{
printf(“threead begiiiiiiiiiiiiiiin \n”);
bool bExit = false;
while (!bExit)
{
astra_status_t st = astra_update();
//键盘输入,非阻塞
if (_kbhit() != 0)
{
//判断缓冲区内容
if (_getch() == 'c')
{
bExit = true;
}
}
}
reader.remove_listener(listener);
astra::terminate();
}
int main()
{
astra_status_t sta = astra::initialize();
//astra::StreamSet streamSet;
/*astra::StreamReader */reader = streamSet.create_reader();
//DetectListener listener;
auto depthStream = configure_depth(reader);
depthStream.start();
reader.stream<astra::BodyStream>().start();
reader.add_listener(listener);
DWORD dwThId;
hDetectThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)DetectThread, NULL, 0, &dwThId);
if(hDetectThread == INVALID_HANDLE_VALUE)
{
return -1;
}
return 0;
}