线程2

28 篇文章 0 订阅
2 篇文章 0 订阅
#define TASK_OK 0
#define TASK_ERROR -1
int ms_task_set_name(const char* name);
#define TASK_HANDLE pthread_t
int ms_task_create(TASK_HANDLE *handle, void *(*func)(void *), void *arg);//detached
int ms_task_create_join(TASK_HANDLE *handle, void *(*func)(void *), void *arg);//join
int ms_task_create_join_stack_size(TASK_HANDLE *handle, int size, void *(*func)(void *), void *arg);

int ms_task_join(TASK_HANDLE *handle);
int ms_task_detach(TASK_HANDLE *handle);
int ms_task_cancel(TASK_HANDLE *handle);
#define ms_task_quit(ptr) pthread_exit(ptr)
int ms_task_set_name(const char* name)
{
	char thread_name[128] = {0};
	if (!name) 
		return -1;
	snprintf(thread_name, sizeof(thread_name), "%s(%ld)", name, syscall(SYS_gettid));
	prctl(PR_SET_NAME, thread_name, 0, 0, 0);
	return 0;
}

int ms_task_create(TASK_HANDLE *handle, void *(*func)(void *), void *arg)
{
    int ret;
    pthread_attr_t attr;

    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
    ret = pthread_create(handle, &attr, func, arg);
    if (ret) {
        printf("%s Failed: %d\n", __FUNCTION__, ret);
		pthread_attr_destroy(&attr);
        return TASK_ERROR;
    }
	pthread_detach(*handle);
    pthread_attr_destroy(&attr);
    return TASK_OK;	
}

int ms_task_create_join(TASK_HANDLE *handle, void *(*func)(void *), void *arg)
{
    int ret;
    pthread_attr_t attr;

    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
    ret = pthread_create(handle, &attr, func, arg);
    if (ret) {
        printf("%s Failed: %d\n", __FUNCTION__, ret);
		pthread_attr_destroy(&attr);
        return TASK_ERROR;
    }

    pthread_attr_destroy(&attr);
    return TASK_OK;	
}

int ms_task_create_join_stack_size(TASK_HANDLE *handle, int size, void *(*func)(void *), void *arg)
{
    int ret;
    pthread_attr_t attr;

    pthread_attr_init(&attr);
    pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
    if (size >= 16*1024)
        pthread_attr_setstacksize(&attr, size);
    ret = pthread_create(handle, &attr, func, arg);
    if (ret) {
        printf("%s Failed: %d\n", __FUNCTION__, ret);
		pthread_attr_destroy(&attr);
        return TASK_ERROR;
    }

    pthread_attr_destroy(&attr);
    return TASK_OK;	
}

int ms_task_join(TASK_HANDLE *handle)
{
    int ret;
	if(!handle)
		return TASK_ERROR;
    ret = pthread_join(*handle, NULL);
    if (ret) {
        printf("%s Failed: %d\n", __FUNCTION__, ret);
        return TASK_ERROR;
    }

    return TASK_OK;	
}

int ms_task_detach(TASK_HANDLE *handle)
{
	return pthread_detach(*handle);
}

int ms_task_cancel(TASK_HANDLE *handle)
{
	return pthread_cancel(*handle);
}
void *thread_playback_export(void *param)
{
	struct ms_playback_bkp_remote bkp = *(struct ms_playback_bkp_remote *)param; 
	remote_backup_msfs_record_file_start(bkp.from, &bkp.combkp, sizeof(struct rep_export_common_backup));
	if(param) ms_free(param);
	remove("/tmp/pbdownload");
	ms_task_quit(NULL);

	return 0;
}


static void on_get_remotepb_download(int reqfrom, void *param, int size)
{	
	struct rep_export_common_backup *tmpBkp = (struct rep_export_common_backup *)param;
	if (!tmpBkp) return;
	
	struct ms_playback_bkp_remote *bkp = ms_malloc(sizeof(struct ms_playback_bkp_remote));
	if (!bkp) return;

	memcpy(&bkp->combkp, tmpBkp, sizeof(struct rep_export_common_backup));
	bkp->from = reqfrom;
	ms_task_create(&bkp->handle, thread_playback_export, (void *)bkp);
	
	return ;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值