我有一個基於IP的攝像頭(basler Ace2000-50gm)連接到運行ubuntu 12.04 64bit的嵌入式主板。我設法根據它的文檔進行配置,現在我可以用任何類型的參數以任何幀速率抓取幀。 (我使用C++的API)突然崩潰後,程序中的所有指針變量是否被刪除?
這裏是初始化代碼:
typedef Pylon::CBaslerGigEInstantCamera Camera_t;
void Cam_Init()
{
bool Camera_Initialization = false;
Camera_t *Camera;
Camera = new Camera_t();
PylonInitialize();
do{
if(!Camera_Initialization)
{
try
{
CTlFactory& tlFactory = CTlFactory::GetInstance();
// Get all attached devices and exit application if no device is found.
DeviceInfoList_t devices;
qDebug("Detecting Camera ....");
if (tlFactory.EnumerateDevices(devices) == 0)
{
throw RUNTIME_EXCEPTION("No camera present.");
}
Camera = new Camera_t( tlFactory.CreateDevice(devices[0 ]));
Camera->Open();
CAcquireContinuousConfiguration().OnOpened(*Camera);
Camera->StartGrabbing(GrabStrategy_UpcomingImage);
Camera_Initialization = true;
qDebug("Camera is Configured Successfully");
}
catch(GenericException &e)
{
Interface<< "**** An exception occurred! Desription is: " << "\n"<< " " << e.GetDescription() << "\n";
}
}
}while(!Camera_Initialization);
}
該代碼是一個大的程序的一部分。
問題是我的程序突然崩潰了(我還沒有找到它的sourceyet),當我重新運行我的代碼時,它沒有檢測到相機,直到它上次崩潰已經過去了5分鐘或更長時間!它提供了以下錯誤消息
**** An exception occurred! Desription is:
Failed to open 'Basler acA2000-50gm#00305316A684#10.136.18.100:3956'. The device is controlled by another application. Err: GX status 0xe1018006 (0xE1018006)
因爲你已經看到我的代碼初始化相機,我用了一個指針對象連接到我的相機,我認爲當代碼崩潰這個指針不會被刪除,所以相機不可用!
我也認爲這是一種網絡問題,我不知道如何解決它。當我的程序crashesh我想盡不同的方式來重新啓動網絡在Ubuntu的服務,如:
sudo service network-manager restart
sudo ifdown eth0 && sudo ifup eth0
.
.
.
但他們沒有爲我工作還是我的程序崩潰時,它需要5分鐘以上才能夠運行我的程序。
令人驚訝的是,5分鐘後我的代碼正確檢測到相機,我能夠運行我的代碼。我嘗試了數十億次,並且必須至少停留5分鐘才能運行代碼來檢測相機!!!(它重複顯示接下來的5分鐘的上述錯誤消息)我在自己的筆記本電腦上多次運行此代碼,然後PC,但在代碼崩潰後,我可以無任何問題地運行代碼,所以我認爲問題在於嵌入式主板網絡!
我認爲在終止一個程序後,每一種變量都會被刪除,但這似乎是錯誤的!
我可以提供任何你想解決這個問題的信息。 謝謝
從使用服務進程與相機交互的代碼中分離崩潰的代碼。當您的主進程崩潰時,服務進程可以乾淨地關閉。 – 2014-11-04 06:31:09
@DavidSchwartz你能否告訴我一些有用的參考資料,以便熟悉如何編寫這些服務。我不知道該如何開始以及在哪裏看。 – PsP 2014-11-04 07:46:59