Я использую библиотеку libpcap. В классе есть некоторый метод, который запускает pcap_loop(...)
, после того, как я пытаюсь добавить полезную нагрузку пакета в QTextEdit, однако доступ к объекту слишком частый.
void SniffPackets::print_hex_ascii_line(const u_char *payload, int len, int offset)
{
static int count = 0;
int i;
int gap;
const u_char *ch;
QString buf;
/* offset */
buf.sprintf("%05d ", offset);
fullPayloadStr.append(buf);
/* hex */
ch = payload;
for(i = 0; i < len; i++) {
buf.sprintf("%02x ", *ch);
fullPayloadStr.append(buf);
ch++;
/* print extra space after 8th byte for visual aid */
if (i == 7){
buf.sprintf(" ");
fullPayloadStr.append(buf);
}
}
/* print space to handle line less than 8 bytes */
if (len < 8){
buf.sprintf(" ");
fullPayloadStr.append(buf);
}
/* fill hex gap with spaces if not full line */
if (len < 16) {
gap = 16 - len;
for (i = 0; i < gap; i++) {
buf.sprintf(" ");
fullPayloadStr.append(buf);
}
}
buf.sprintf(" ");
fullPayloadStr.append(buf);
/* ascii (if printable) */
ch = payload;
for(i = 0; i < len; i++) {
if (isprint(*ch)){
buf.sprintf("%c", *ch);
fullPayloadStr.append(buf);
}
else{
buf.sprintf(".");
fullPayloadStr.append(buf);
}
ch++;
}
count++;
buf.sprintf("\n");
fullPayloadStr.append(buf);
if(count < 10){
}
else{
::payloadLog->appendPayload(fullPayloadStr);
count = 0;
fullPayloadStr.clear();
}
return;
}
И метод, который добавляет некоторую информацию в QTextEdit
:
void Payload::add(){
//qDebug() << QThread::currentThreadId();
::plain->append(this->text);
// future2.cancel();
}
Все хорошо, но когда я касаюсь полосы прокрутки, мое приложение вылетает. Как я могу это исправить?
Кстати, я пытался использовать многопоточность и одновременность. Они не работали.