1. 程式人生 > >Linux執行緒建立以及回撥函式的使用

Linux執行緒建立以及回撥函式的使用

這段時間要實現一下使用深度學習分類來輔助現有演算法。主要就是在主程式有需求的時候呼叫深度學習方法,並保證程式不卡死。然後等深度學習演算法處理完成,再返回處理結果。

下面貼出相關簡化後的程式碼。記錄一下。

CDLProcess.h

#include <iostream>
#include "pthread.h"

using namespace std;

class IDLProcessCallBack
{
	//回撥類,這裡自定義所有回撥函式
public:
	virtual void OnDLProcessCallBack() = 0;
};


class CDLProcess
{
public:
	CDLProcess();
	~CDLProcess();

public:
	int Initial(IDLProcessCallBack *_DLCallBack);
	void Process();

private:
	IDLProcessCallBack *m_DLCallBack;
	pthread_t m_threadID;
};

CDLProcess.cpp

#include "CDLProcess.h"

void *thread_DLProcess(void *arg)
{
	CDLProcess *pDLProcess = (CDLProcess*)arg;
	pDLProcess->Process();
	pthread_exit((void*)0);
	return 0;
}

CDLProcess::CDLProcess()
{

}

CDLProcess::~CDLProcess()
{

}

int CDLProcess::Initial(IDLProcessCallBack *_DLCallBack)
{
	m_DLCallBack = _DLCallBack;
	if (pthread_create(&m_threadID, NULL, thread_DLProcess, (void*)this) != 0)
	{
		printf("create thread of DLProcess failed! \n");
		return -1;
	}
}

void CDLProcess::Process()
{
	//自定義處理過程
	while (true)
	{
		printf("111\n");
	}
}

main.cpp

#include "CDLProcess.h"

using namespace std;

class CProcessCallBack : public IDLProcessCallBack
{
	void OnDLProcessCallBack();
};

void CProcessCallBack::OnDLProcessCallBack()
{
	printf("22222\n");
}

int main()
{
	CDLProcess DLProcess;
	CProcessCallBack aaa;
	DLProcess.Initial(&aaa);


	system("pause");

	return 0;
}