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))/переписать условие добавить было iTmpCountRealiz%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)/need ! .
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)
так может обращаешься в потоках с разным кодом (главный и вспомогательный), тогда мютех на функцию потока не поможет
А вот этого я не понял. В одном потоке создаеться другой, а мьютекс объявлен как глобальный.