0
我正在使用libmodbus庫。我需要在線程之間傳遞modbus_t指針的實例。我有隻是原始指針的困難,我想我可以解決與自定義刪除使用boost_shared_ptr的問題。boost共享指針定製刪除器示例
我沒有得到任何編譯器問題,但是當我運行程序時它崩潰了。 我希望如果有人能給我一個使用自定義刪除提升共享指針的例子。
程序在m_mb.reset()在OpenModBusConnection()函數中第一次被調用的行崩潰。
m_mb = boost::shared_ptr<modbus_t>(modbus_new_rtu(m_heatercomport.c_str(),9600,'N',8,1), freemodbus);
void freemodbus(modbus_t *mb)
{
if(mb != NULL)
{
modbus_close(mb);
modbus_free(mb);
}
}
void OpenModBusConnection()
{
if(m_mb.get() != NULL)
{
wxString msg("Closing port \"");
msg.append(m_heatercomport);
msg.append("\" modbus port ");
wxLogMessage(msg);
readoutput->AppendText("Modbus Connection Closed\n");
m_mb.reset();
}
// open modbus connection
m_mb.reset();
modbus_set_slave(m_mb.get(),1);
if(modbus_connect(m_mb.get()) == -1)
{
wxString msg("Failed to open port \"");
msg.append(m_heatercomport);
msg.append("\" modbus port ");
wxLogMessage(msg);
readoutput->AppendText("Modbus Connection Failed\n");
return false;
}
else
{
wxString msg("Opening port \"");
msg.append(m_heatercomport);
msg.append("\" modbus port ");
wxLogMessage(msg);
readoutput->AppendText("Modbus Connection Established\n");
return true;
}
}
錯誤消息我得到的是
First-chance exception at 0x7717bb47 in test.exe: 0xC0000008: An invalid handle was specified.