Exemple #1
0
int amservicestart() 
{

	pthread_mutex_init(&net_mutex, NULL);
	seminit();

	sockfd = dtcmr_client_creat("127.0.0.1",12580, IPPROTO_TCP);
	if (sockfd<0){
		printf("dtcmr_client_creat is error\n");	
		return -1;
	}
	memset(sddata,2,1024);

	send_pthread_init();

	while(1)
	{
		pthread_mutex_lock(&net_mutex);
		printf("while recv_pack\n");
		recv_pack();
		pthread_mutex_unlock(&net_mutex);
		usleep(5000);
	}
}
//默认connect 127.0.0.1 12580
void *client_pthread()
{
	//返回的msg_set序号(用于recv_time_out)
	cli_serial_num = client_create();
	//获取sockfd(用于send)
	cli_sockfd = get_cli_sockfd(cli_serial_num);
	if(cli_serial_num < 0)
	{
		fprintf(stderr,"client_create failed\n");
		return NULL;
	}
	fprintf(stderr,"connect success %d\n",cli_serial_num);
	//设定对于cancel请求的参数
	pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);

	send_pthread_init();
	
	//接收手机端信息(有可能阻塞,由main_pthread调用pthread_cancel结束)
	while(end_flag == 0)
	{
		usleep(1000);
		if(send_or_recv == 0)
		{
			pthread_mutex_lock(&ass_pthread_mutex);
			fprintf(stderr,"recv_pthread lock\n");
			recv_package();
			fprintf(stderr,"recv_pthread unlock\n");
			pthread_mutex_unlock(&ass_pthread_mutex);
			send_or_recv = 1;
		}
		usleep(4000);
	}
	fprintf(stderr,"recv_pthread exit\n");
	pthread_exit(NULL);
}