在开发制作SDK时,由于需要不定时的上发一些数据给第三方调用SDK的用户,所以需要用到回调函数来实现。
//定义 信号量句柄、全局指针、信号量触发线程
HANDLE h_ThreadSem = NULL;
unsigned charbuf[100];
DWORD WINAPI RevThreadFun(LPVOID);
//回调函数
void printbuf(unsigned char *data)
{
for (int i = 0; i < 19; i++)
{
buf[i] = data[i];
}
ReleaseSemaphore(h_ThreadSem, 1, NULL);//当调用回调函数时,释放信号量
}
int main()
{
Init(printbuf);
return 0;
}
//等待信号量线程
DWORD WINAPI RevThreadFun(LPVOID n)
{
printf("RevThreadFun\r\n");
while (1)
{
if (WaitForSingleObject(h_ThreadSem, INFINITE) == WAIT_OBJECT_0)//当有信号量释放时,执行相应逻辑
{
printf("buf: ");
int i;
printf("\r\n");
}
else
{
printf("WaitForSingleObject timeout!\r\n");
return -1;
}
}
return 0;
}
//以下为SDK封装部分的内容
pfun funCallback;//定义一个回调指针
int Init(void(*bufPrint)())
{
funCallback = funbufPrint;//将在main中定义好的回调函数给回调指针
return 0;
}
funCallback(putBuf);//在逻辑中使用,将响应数据传给回调函数