Sigabrt что это
Перейти к содержимому

Sigabrt что это

  • автор:

SIGABRT

В POSIX-системах, SIGABRT — сигнал, посылаемый процессом самому себе при выполнении функции abort() , для аварийного останова, в случае невозможности дальнейшего продолжения программы.

SIGABRT — целочисленная константа, определенная в заголовочном файле signal.h . Символьные имена сигналов используются вместо номеров, так как в разных реализациях номера сигналов могут различаться.

В GNU/Linux, также есть сигнал SIGIOT который является синонимом SIGABRT.

Этимология

SIG — общий префикс сигналов, АBRT — сокращенное написание англ. abort — преждевременное прекращение, прерывание (английский компьютерный жаргон). IOT аббревиатура англ. I/O transfer Trap — ловушка ввода-вывода (также IOT является мнемоникой инструкции PDP-8 аббревиатура I/O Transfer)

Использование

Сигнал SIGABRT процесс посылает сам себе, когда вызывает функцию abort() (функция libc, с прототипом в stdlib.h). Сигнал SIGABRT может быть перехвачен или проигнорирован, но abort() принудительно завершит программу (предварительно сбросив и закрыв стандартные потоки и сделав дамп памяти программы) даже если этого не сделает обработчик сигнала. Таким образом функция abort() гарантирует завершение программы, почему она часто используется библиотеками в аварийных ситуациях — когда выполнение не должно быть продолжено, но основная программа должна иметь возможность выполнить действия, необходимые перед аварийным завершением.

Также SIGABRT вызвается утверждениями (англ. assertions ; средство отладки Си — макроопределение assert() вызывает abort() если утверждение переданное в качестве аргумента ложно).

Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 12 мая 2011.

  • Сигналы POSIX

Wikimedia Foundation . 2010 .

Почему появляется SIGABRT в данном случае?

При попытке вызвать конструктор класса с параметром типа «string», вылеает ошибка SIGABRT:

//WebDriver.h WebDriver::WebDriver(const string& domain);
//main.cpp WebDriver driver("sitename.com"); //SIGABRT

Вопрос сильно усложняется тем, что переменная domain в WebDriver не делает вообще ничего. При попытках ставить брейкпойнты на первых строчках кода конструктора, отладчик даже не доходит до исполнения этого кода:

WebDriver::WebDriver(const string& domain)< //SIGABRT int port = 443; // до сюда не доходит исполнение //. >

Но если убрать параметры у класса, исполнение проходит без ошибок:

WebDriver::WebDriver()< int port = 443; // OK //. >
  • Вопрос задан 10 нояб. 2022
  • 92 просмотра

5 комментариев

Простой 5 комментариев

cryptohas , покажи объявление класса WebDriver .
Конструктор WebDriver::WebDriver(const string& domain); объявлен как explicit?
cryptohas @cryptohas Автор вопроса

class WebDriver < bool first; QJSEngine js; public: HTTPS_Client http_client; private: QJSValue timer_array, timer_array_temp, request_array, date_array, event_array, location, debug, raw_cookies; const int SLEEP_TIME_MS = 10; QJSValue evaluate_info(const string& query)< QJSValue result = js.evaluate(query.c_str()); if(result.isError()) throw runtime_error("\n\n---------- ----------\n\nError execution JavaScript code: \n\n" + query + "\n\n---------- ----------\n\n"); return result; >QJSValue evaluate(const string& script); public: WebDriver(const string& _domain) : http_client("", SOCKS5()), first(true) < timer_array = js.newArray(); js.globalObject().setProperty("timer_array", timer_array); timer_array_temp = js.newArray(); js.globalObject().setProperty("timer_array_temp", timer_array_temp); request_array = js.newArray(); js.globalObject().setProperty("request_array", request_array); event_array = js.newArray(); js.globalObject().setProperty("event_array", event_array); date_array = js.newArray(); js.globalObject().setProperty("date_array", date_array); raw_cookies = js.newObject(); js.globalObject().setProperty("raw_cookies", raw_cookies); raw_cookies.setProperty("cookies", ""); location = js.newObject(); js.globalObject().setProperty("location", location); location.setProperty("href", ""); debug = js.newObject(); js.globalObject().setProperty("debug", debug); debug.setProperty("val", ""); if(1)< fstream file("1", ios_base::out | ios_base::in | ios_base::app | ios_base::ate | ios_base::binary); file.seekg(ios_base::beg); string script; while(file.peek() != EOF) script += (char)file.get(); evaluate(script); >evaluate_info("debug.val = !window._phantom;"); //qDebug() ; HTMLTree browse(const string& method = "GET", const string& URI = "/", const string& data = ""); >;

cryptohas @cryptohas Автор вопроса

Вызывая этот код, появляется проблема. domain вообще нигде не участвует, однако именно из за него вылетает ошибка

cryptohas, это не в параметре конструктора проблема. И код у тебя не начинает работать нормально если параметр убрать. Просто с параметром звезды сходятся так, что имеющаяся в коде ошибка приводит к падению.
Код большой и непредсказуемый. Однозначно по нему сказать ничего не получится. Тебе нужно отлаживаться самостоятельно.

SIGABRT — это далекое последствие. Скорее всего у тебя в коде внесен UB. У тебя падает код инициализатора полей WebDriver , он выполняется до тела конструктора.
Проведи построчную трассировку инициализатора. Ты увидишь, инициализация какого поля приводит к падению.

Решения вопроса 1
cryptohas @cryptohas Автор вопроса

Ошибка крылась не в аргументах, а полях класса:

class WebDriver< QJSEngine js; //. >;

QJSEngine требовал инициализации некоторых значений ещё до вызова конструктора WebDriver:

QApplication a(argc, argv); // Этого кода не было WebDriver driver("domain"); //Теперь все хорошо

Если вылетает ошибка до выполнения кода конструктора, стоит проверить переменные этого класса

ошибка Thread1: signal SIGABRT

Пишу код на Swift 3 в Xcode 8. Создаю пользовательский аккаунт с помощью Firebase, но при запуске программы появляется ошибка: «Thread1: signal SIGABRT», указывающая на строку class AppDelegate . Описание ошибки:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Storage bucket cannot be initialized with a path' 

С чем может быть связано появление данной ошибки? Все кнопки привязаны правильно, контроллеры имеют нужный класс. Проблема возникает при работе именно с FireBaseStorage, с FirebaseDatabase, например, проблем нет.

Отслеживать
задан 17 июл 2017 в 8:48
19 1 1 серебряный знак 5 5 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

как пишут тут надо инициализировать Firebase Storage перед обращением:

let storageRef = FIRStorage.storage().reference() 

а вообще, нужно добавить Exception Breakpoint, и тогда (возможно) при падении будет указываться именно проблемное место в программе, а не AppDelegate.

Sigabrt что это

Просмотр профиля

13.1.2010, 17:58

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Репутация: 44

2 Skier78rus
Ну тогда пора код выкладывать.
Для начала интересно взглянуть на main.cpp

опции профиля:

Просмотр профиля

13.1.2010, 17:58

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Репутация: -1

в какой то контейнер одновременно в двух потоках обращаешься (меняешь размер)

опции профиля:

Просмотр профиля

13.1.2010, 18:12

Группа: Новичок
Сообщений: 14
Регистрация: 13.1.2010
Пользователь №: 1368

Репутация: 0

Везде исрользуеться QMutex мог конечно налажать где-то, но я две недели уже глюк ищу.
И все что в потоке крутиться(функция не большая) засунул в один большой Мутекс.

#include. 


int main(int argc, char *argv[]) QApplication a(argc,argv);
MainWindow w;
w.show();
return a.exec();
>

QApplication a(argc,argv); вот эта строка если в valgrinde смотреть со всеми ворнингами не нравиться.

А насчет остального кода, я просто не совсем понимаю какой именно привести. впринципе это две функции(через несколько мин их тоже выложу)

размер ничего не меняю. есть один массив глобальный(40 Мб) в который я пишу и из которого читаю.
И выделенные еще 5 массивов в конструкторе диалога. они убиваються в деструкторе.

опции профиля:

Просмотр профиля

13.1.2010, 18:40

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Репутация: -1

так может обращаешься в потоках с разным кодом (главный и вспомогательный), тогда мютех на функцию потока не поможет

в студии то чего собрать не хочешь?

опции профиля:

Просмотр профиля

13.1.2010, 19:03

Группа: Новичок
Сообщений: 14
Регистрация: 13.1.2010
Пользователь №: 1368

Репутация: 0

мне под Линух надо. начальство сказало, что пора осваивать.
Или Вы имеете ввиду только для поиска бага?

Это функция которая вызываеться по таймеру в основном потоке, кроме нее больше ничего не выполняеться(только в главном окне ожидание результата dialog.exec)

Раскрывающийся текст

void workDlg::timerDataOk() try qint32 iTmpCountRealiz; 
qint32 iTmpReciveSize,tmpMathCount;
qint8 iTmpState,iTmpPrevState;
QString tmpStr,tmpStr1;
double dTmpSin=0,dTmpCos=0;
long double MO=0,DISP=0,MO2=0,dSin=0,dCos=0,POROG=0,dMaxAmpl=0,DISP1=0;
qint16 iMax=-1,iMin=-1,iNumber=0;
QString strMyTime;
myMutex.lock();
iTmpCountRealiz=iCountRealiz;
iTmpReciveSize=iReciveSize;
iTmpState=iState;
iTmpPrevState=iPrevState;
myMutex.unlock();
if(iTmpState==iTmpPrevState && iTmpState!=UNKNOWN_STATE && iTmpPrevState!=UNKNOWN_STATE) iCountState++;
>
if(iTmpState!=iTmpPrevState) iCountState=0;
iTmpPrevState=iTmpState;
myMutex.lock();
iPrevState=iTmpPrevState;
myMutex.unlock();
>
if(iCountState==ERROR_COUNT) bInit=false;
if(iTmpState==CONNECT_SEND) m_ui->testLabel->setText("Нет ответа от БИЗОНА");
>
else if(iTmpState==PARAM_SEND) m_ui->testLabel->setText("Ошибка передачи параметров инициализации");
>
else if(iTmpState==START_SEND) m_ui->testLabel->setText("Ошибка начала получения данных");
>
else if(iTmpState==DATA_RECIVE) m_ui->testLabel->setText("Ошибка при получения данных");
>
>
tmpMathCount=iCountMathRealiz;
if(SAVE_WORK_DEBUG)
AddDebugFile(fName," In timer");
if( ((iTmpCountRealiz-iCountMathRealiz)>=settingsStruct.soundingStruct.iCount)) if(SAVE_WORK_DEBUG)
AddDebugFile(fName," In if");
while(iCountMathRealiz <(iTmpCountRealiz-iTmpCountRealiz%settingsStruct.soundingStruct.iCount))if(SAVE_WORK_DEBUG)
AddDebugFile(fName," In while");
myTime = QTime::currentTime();
strMyTime=myTime.toString("ss:zzz")+" ";
MO=0;
DISP=0;
MO2=0;
if(settingsStruct.soundingStruct.iCount>1) for(qint16 i=DATA_SDVIG;i dTmpSin=0;
for(qint16 iC=0;iC dTmpSin+=((reciveBuffer[(iCountMathRealiz+iC)*(iTmpReciveSize)+i+2+1] <<8)+reciveBuffer[(iCountMathRealiz+iC)*(iTmpReciveSize)+i+2]);
>
dTmpCos/=settingsStruct.soundingStruct.iCount;
dTmpSin/=settingsStruct.soundingStruct.iCount;
reciveBuffer[iCountMathRealiz*iTmpReciveSize+i]=(qint8)dTmpCos;
reciveBuffer[iCountMathRealiz*iTmpReciveSize+i+1]=(qint8)((qint32)dTmpCos>>8);
reciveBuffer[iCountMathRealiz*iTmpReciveSize+i+2]=(qint8)dTmpSin;
reciveBuffer[iCountMathRealiz*iTmpReciveSize+i+3]=(qint8)((qint32)dTmpSin>>8);
dTmpCos=0;
dTmpSin=0;
>
>
if(SAVE_WORK_DEBUG)
AddDebugFile(fName," Usred");
//*****************MO and DISP********* вся математика
for(qint16 i=DATA_SDVIG;i dCos=((reciveBuffer[(iCountMathRealiz)*iTmpReciveSize+i+1] <<8)+reciveBuffer[(iCountMathRealiz)*iTmpReciveSize+i]);
dSin=((reciveBuffer[(iCountMathRealiz)*iTmpReciveSize+i+2+1] <<8)+reciveBuffer[(iCountMathRealiz)*iTmpReciveSize+i+2]);
MO+=sqrt((double)(dSin*dSin+dCos*dCos));
MO2+=(dSin*dSin+dCos*dCos);

>
if(((iTmpReciveSize-8)/4) != 0) MO/=((iTmpReciveSize-8)/4);///1
DISP1/=((iTmpReciveSize-8)/4);
MO2/=((iTmpReciveSize-8)/4);//130
>
DISP=qAbs(MO2-MO*MO);
POROG=MO+(DISP*settingsStruct.ionogramStruct.fCoeff);
POROG=400;
qint32 iNumData=(quint16)((reciveBuffer[(iCountMathRealiz)*(iTmpReciveSize)+5] <<8)+(quint8)reciveBuffer[(iCountMathRealiz)*(iTmpReciveSize)+4]);
if(SAVE_WORK_DEBUG)
AddDebugFile(fName," MO Disp");
//*********svertka and *********************
for(qint16 i=DATA_SDVIG;i <(iTmpReciveSize-2)-MANIP_SIZE*4;i+=4)iNumber=(i-DATA_SDVIG)/4;
iConvolutionRe[iNumber]=0;
iConvolutionIm[iNumber]=0;

for(qint16 j=0;j eciveSize+i+1+j*4] <<8)+reciveBuffer[(iCountMathRealiz)*iTmpReciveSize+i+j*4]);
iConvolutionIm[iNumber]+=iManipSignal[j]*((reciveBuffer[(iCountMathRealiz)*iTmpR
eciveSize+i+2+1+j*4] <<8)+reciveBuffer[(iCountMathRealiz)*iTmpReciveSize+i+2+j*4]);
>
iConvolutionAmpl[iNumber]=sqrt(iConvolutionRe[iNumber]*iConvolutionRe[iNumber]+i
ConvolutionIm[iNumber]*iConvolutionIm[iNumber]);
if( iConvolutionAmpl[iNumber]>POROG && iMin==-1) iMin=iNumber;
dMaxAmpl=iConvolutionAmpl[iNumber];
>
if(iMin!=-1) if(iConvolutionAmpl[iNumber]>dMaxAmpl)
dMaxAmpl=iConvolutionAmpl[iNumber];
>
if(iConvolutionAmpl[iNumber] ionStruct.freq[ionStruct.clv]=(settingsStruct.soundingStruct.iStartFreq+settings
Struct.soundingStruct.iStepFreq*(iNumData/settingsStruct.soundingStruct.iCount))*1000;
ionStruct.startHeight[ionStruct.clv]=iMin*1.5+settingsStruct.soundingStruct.iSta
rtHei;
ionStruct.endHeight[ionStruct.clv]=iMax*1.5+settingsStruct.soundingStruct.iStart
Hei;
ionStruct.amp[ionStruct.clv] = dMaxAmpl;
ionStruct.height[ionStruct.clv]=POROG;
ionStruct.clv++;
iMin=-1;
iMax=-1;
dMaxAmpl=0;
>
if(((i+4) >= (iTmpReciveSize-2)-MANIP_SIZE*4) && iMin!=-1) iMax=iNumber;
ionStruct.freq[ionStruct.clv]=(settingsStruct.soundingStruct.iStartFreq+settings
Struct.soundingStruct.iStepFreq*(iNumData/settingsStruct.soundingStruct.iCount))*1000;
ionStruct.startHeight[ionStruct.clv]=iMin*1.5+settingsStruct.soundingStruct.iSta
rtHei;
ionStruct.endHeight[ionStruct.clv]=iMax*1.5+settingsStruct.soundingStruct.iStart
Hei;
ionStruct.amp[ionStruct.clv] = dMaxAmpl;
ionStruct.height[ionStruct.clv]=POROG;
ionStruct.clv++;
iMin=-1;
iMax=-1;
dMaxAmpl=0;
>
>
//Конец математики
if(SAVE_WORK_DEBUG)
AddDebugFile(fName," Svertka");

iCountMathRealiz+=settingsStruct.soundingStruct.iCount;//
tmpStr="Полученике данных: ";
tmpStr1.setNum(iCountMathRealiz);
tmpStr+=tmpStr1;
m_ui->testLabel->setText(tmpStr);
>
>//if %
if(iCountMathRealiz!=tmpMathCount) m_ui->ciFrame->update();
>
if(!bStartUdp && !bInit /*&& (iCountMathRealiz == (iTmpCountRealiz) || iCountState==ERROR_COUNT)*/) m_ui->ciFrame->update();
mathTimer->stop();
if(myThread.isRunning()) myThread.stop();
myThread.wait();
>
if(ionStruct.clv!=0)
saveIonFile();
m_ui->rEdit->setText(aaa);
if( iCountState==0)
m_ui->testLabel->setText("БИЗОН остановлен");
else
m_ui->testLabel->setText("БИЗОН остановлен c ошибкой");
iCountState=0;
if(IS_SOURCE_SAVE) QFile file("SourceData.DAT");
if(!file.open(QIODevice::WriteOnly)) >
else QString fStr,fStr1;
for(qint16 i=0;i fStr1.setNum(i+1);
fStr+=fStr1+'\n';
file.write(fStr.toLocal8Bit());
for(qint16 j=DATA_SDVIG;j fStr.setNum((j-DATA_SDVIG)/4);
dCos=((reciveBuffer[(i)*iTmpReciveSize+j+1] <<8)+reciveBuffer[(i)*iTmpReciveSize+j]);
fStr1.setNum((qint32)dCos);
fStr+='\t'+fStr1+'\t';
dSin=((reciveBuffer[(i)*iTmpReciveSize+j+2+1] <<8)+reciveBuffer[(i)*iTmpReciveSize+j+2]);
fStr1.setNum((qint32)dSin);
fStr+=fStr1+'\n';
file.write(fStr.toLocal8Bit());
>
>
file.close();
>
>
iCountState=0;
>
if(bStartUdp) m_ui->ciFrame->update();

bStartUdp=false;
if(!IS_TIMER_EMULATION) if(myThread.isRunning()) myThread.stop();
myThread.wait();
>
myThread.start(QThread::HighPriority);//QThread::NormalPriority TimeCriticalPriority
>
else iState=CONNECT_SEND;
bInit=true;
emulationTimer->start(1000/settingsStruct.soundingStruct.iPulseFreq);
>
m_ui->testLabel->setText("Соединение с БИЗОНОМ");
>
if(SAVE_WORK_DEBUG)
AddDebugFile(fName," End");
>
catch(. ) m_ui->testLabel->setText("Ошибка обработки даных. ");
>
>

А это функция самого потока.

Раскрывающийся текст

void GetDataThread::run() QByteArray bArray; 
QHostAddress hAddress;
qint16 iPort;
qint32 iTmpCountRealiz,iTmpReciveSize;
QString strMyTime=thTime.toString("ss:zzz")+" ";
QHostAddress sender;
quint16 senderPort;
quint16 tmp;
QString strPriv="";
char toSend[100];
QString text,text1;
quint16 iTmp=0;
QTime myTime;
qint16 tmpSig=0;
quint8 iSdvig;
qint64 iRSize=-1;
QString fName="1thread.dat";
ResetDebugFile(fName);
//AddDebugFile(fName," In Thread");
bInit=true;
myMutex.lock();
iState=CONNECT_SEND;
iPrevState=CONNECT_SEND;
hAddress=QHostAddress(settingsStruct.connectStruct.strAddress);
iPort=settingsStruct.connectStruct.iPort;
myMutex.unlock();
bArray.clear();
bArray[0]=0xA0;
udpSocket->writeDatagram(bArray.data(), bArray.size(),hAddress,iPort);
while(!stoped) if(!IS_EMULATION) myMutex.lock();
iTmpCountRealiz=iCountRealiz;
myMutex.unlock();
while (udpSocket->hasPendingDatagrams() && (iTmpCountRealiz < (settingsStruct.soundingStruct.iCountFreq*settingsStruct.soundingStruct.iCoun
t)) ) myMutex.lock();
thTime = QTime::currentTime();
iTmpReciveSize=udpSocket->pendingDatagramSize();//4000;
iRSize=udpSocket->readDatagram(reciveBuffer+(iTmpCountRealiz*iMathReciveSize),udpSocket->pendingDatagramSize(),&sender,&senderPort);//вставил iMathReciveSize
if(iRSize!=-1) if(reciveBuffer[iTmpCountRealiz*iMathReciveSize]== (char)0xB0) bInit=true;
for(int i=1;i >
if(true/*(quint8)reciveBuffer[iTmpCountRealiz*iMathReciveSize+24]==3 || (quint8)reciveBuffer[iTmpCountRealiz*iMathReciveSize+24]==7*/) //m_ui->testLabel->setText(strPriv);
toSend[0]=0xA1;
toSend[2]=(qint8)(((settingsStruct.soundingStruct.iStartFreq)>>8));
toSend[1]=(qint8)(settingsStruct.soundingStruct.iStartFreq);
toSend[4]=(qint8)((settingsStruct.soundingStruct.iEndFreq)>>8);
toSend[3]=(qint8)((settingsStruct.soundingStruct.iEndFreq));
toSend[6]=(qint8)((settingsStruct.soundingStruct.iStepFreq)>>8);
toSend[5]=(qint8)((settingsStruct.soundingStruct.iStepFreq));
toSend[8]=(qint8)(settingsStruct.soundingStruct.iStartHei>>8);
toSend[7]=(qint8)(settingsStruct.soundingStruct.iStartHei);
toSend[10]=(qint8)(settingsStruct.soundingStruct.iEndHei>>8);
toSend[9]=(qint8)(settingsStruct.soundingStruct.iEndHei);
toSend[11]=(qint8)(100/settingsStruct.soundingStruct.iPulseFreq);
toSend[12]=(qint8)(settingsStruct.soundingStruct.iCount);
toSend[13]=(qint8)(settingsStruct.soundingStruct.iManipCode);
tmp=(settingsStruct.soundingStruct.iStartHei*2*10000)/300000;
udpSocket->writeDatagram(toSend, 14,QHostAddress(settingsStruct.connectStruct.strAddress),settingsStruct.connectS
truct.iPort);
iState=PARAM_SEND;
>
else bInit=false;
>
>
else if(reciveBuffer[iTmpCountRealiz*iMathReciveSize]== (char)0xB3) toSend[0]=0xA2;
udpSocket->writeDatagram(toSend,1,QHostAddress(settingsStruct.connectStruct.strAddress),
settingsStruct.connectStruct.iPort);
iState=START_SEND;
>
else if(reciveBuffer[iTmpCountRealiz*iMathReciveSize]==(char) 0xB1) iState=DATA_RECIVE;
PrevState=DATA_ERROR;
iTmpCountRealiz++;
if(iMathReciveSize!=iTmpReciveSize)//. or do exit.
iTmpReciveSize=iMathReciveSize;
if(iTmpCountRealiz ==(settingsStruct.soundingStruct.iCountFreq*settingsStruct.soundingStruct.iCoun
t
)) toSend[0]=0xA3;
udpSocket->writeDatagram(toSend,1,QHostAddress(settingsStruct.connectStruct.strAddress),
settingsStruct.connectStruct.iPort);
iState=UNKNOWN_STATE;
bInit=false;
>
>
>//if iRSize
else AddDebugFile(fName," ErrorRecive Data");
>
iReciveSize=iTmpReciveSize;
iCountRealiz=iTmpCountRealiz;
msleep(1);
>
msleep(1);
>
else myMutex.lock();
iState=CONNECT_SEND;
if((iState==CONNECT_SEND || iState==DATA_RECIVE)&& iCountRealizt
)
iSdvig=(iCountRealiz/settingsStruct.soundingStruct.iCount);//(iMathReciveSize-8)/16;//(iMathReciveSize-8)/4-MANIP_SIZE*2;//iCountRealiz*3;
reciveBuffer[iCountRealiz*iMathReciveSize]=0XB1;
reciveBuffer[iCountRealiz*iMathReciveSize+4]=(qint8)(iCountRealiz);
reciveBuffer[iCountRealiz*iMathReciveSize+5]=(qint8)((iCountRealiz)>>8);

for(qint16 k=DATA_SDVIG;k reciveBuffer[iCountRealiz*iMathReciveSize+k]=(qint8)tmpSig;
reciveBuffer[iCountRealiz*iMathReciveSize+k+1]=(qint8)(tmpSig>>8);
reciveBuffer[iCountRealiz*iMathReciveSize+k+2]=(qint8)tmpSig;
reciveBuffer[iCountRealiz*iMathReciveSize+k+3]=(qint8)(tmpSig>>8);
>

iCountRealiz++;
iReciveSize=iMathReciveSize;
iState=DATA_RECIVE;
iPrevState=DATA_ERROR;
>
else if(iCountRealiz>=settingsStruct.soundingStruct.iCountFreq*settingsStruct.soundingStruct.iCou
n
t) iState=UNKNOWN_STATE;
bInit=false;
>
myMutex.unlock();
msleep(1);
>
>
bInit=false;
stoped=false;
>

Цитата(kuler @ 13.1.2010, 18:40)

так может обращаешься в потоках с разным кодом (главный и вспомогательный), тогда мютех на функцию потока не поможет

А вот этого я не понял. В одном потоке создаеться другой, а мьютекс объявлен как глобальный.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *