20120603命令行下线程调用代码----OK

dms_lib.cpp:

#include "dms_lib.h"
#include <pthread.h>
#include "PltUPnP.h"
#include "PltFileMediaServer.h"

NPT_SET_LOCAL_LOGGER("platinum.media.server")

PLT_UPnP upnp;
PLT_DeviceHostReference device;
pthread_t thread;

int stop_dms();
void* start_dms(void*)
{	
	// setup Neptune logging
    NPT_LogManager::GetDefault().Configure("plist:.level=INFO;.handlers=ConsoleHandler;.ConsoleHandler.colors=off;.ConsoleHandler.filter=42");
	NPT_LOG_INFO("enter start_dms()\n");
	/* for DLNA faster testing */
	PLT_Constants::GetInstance().SetDefaultDeviceLease(30.);
	device = new PLT_FileMediaServer("/data/local", 
                                "1111111111UPnP Media Server",
                                false,
                                "1111111111111");
    NPT_List<NPT_IpAddress> list;
    //NPT_CHECK_SEVERE(PLT_UPnPMessageHelper::GetIPAddresses(list));
    PLT_UPnPMessageHelper::GetIPAddresses(list);
    NPT_String ip = list.GetFirstItem()->ToString();

    device->m_ModelDescription = "Platinum File Media Server";
    device->m_ModelURL = "http://www.plutinosoft.com/";
    device->m_ModelNumber = "1.0";
    device->m_ModelName = "Platinum File Media Server";
    device->m_Manufacturer = "Plutinosoft";
    device->m_ManufacturerURL = "http://www.plutinosoft.com/";

    upnp.AddDevice(device);
    
    NPT_String uuid = device->GetUUID();
	upnp.Start();
    //NPT_CHECK_SEVERE(upnp.Start());

    NPT_LOG_INFO_2("baojinyu,debug info:ip-->%s,uuid--->%s", 
					(const char*)ip, 
					(const char*)uuid);
	while(1)
	{
	}
	stop_dms();
	pthread_exit(NULL);
	return NULL;
		
}

int stop_dms()
{
	NPT_LOG_INFO("baojinyu--------dms_lib---->stop_dms.\n");	
	upnp.Stop();
	return 0;
}

int dmsThreadBegin()
{
	int dmsT;
	int retval;
	retval = pthread_create(&thread, NULL, start_dms, (void*)dmsT); 
	if(retval != 0)
	{
		NPT_LOG_INFO("baojinyu---------------create thread fail!\n");
		
		return -1;
	}
	else
	{
		NPT_LOG_INFO("baojinyu----------------pthread_create success.\n");  
		
		return 0;
	}
	return 0;                                
}

int dmsThreadEnd()
{
	//pthread_join();
	stop_dms();
	pthread_exit(NULL);//should be:send command to thread to end itself.
	//pthread_cancel(thread); //there is no this function.
	return 0;
}





dms_lib.h:

#ifndef DMS_LIB_H
#define DMS_LIB_H

int dmsThreadBegin();
//int dmsThreadEnd();

#endif //DMS_LIB_H


main.cpp:

#include "dms_lib.h"
/*----------------------------------------------------------------------
|   main
+---------------------------------------------------------------------*/
int
main(int /* argc */, char** argv)
{
    dmsThreadBegin();
    while(1)
    {
	}
    //dmsThreadEnd();

    return 0;
}



你可能感兴趣的:(20120603命令行下线程调用代码----OK)