- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
void MeasureWorker::measure()
{
QVector< QVector<double> > *S12_AmplitudeCurveArray = new QVector< QVector<double> >;
QVector<double> *S11_Amplitudes = new QVector<double>;
mutex = new QMutex();
if (!running) {
return;
}
switch(mode) {
case AUTO_MODE: {
if (type == SofNum) {
if (!readSofNum()) {
if (deviceProblem) {
closeDevices();
stop();
}
}
}
if (type == SofFreq) {
if (!readSofFreq(S12_AmplitudeCurveArray, S11_Amplitudes)) {
if (deviceProblem) {
closeDevices();
stop();
}
}
}
// Дальше пока что неинтересно...
bool MeasureWorker::readSofFreq(QVector<QVector<double> > *S12_AmplitudeCurveArray,
QVector<double> *S11_AmplitudeCurve)
{
if (selectedChannel.CH1) {
if (!oneReadSofFreq(S11_AmplitudeCurve,
S12_AmplitudeCurveArray, 1)) {
return false;
}
} else {
mutex->lock();
S12_AmplitudeCurveArray->append(QVector<double>(NP51, 0.0));
try {
r4m->setSweepParams(START, STOP, NP51);
r4m->startSweep();
QVector<ComplexType> freqS11 = r4m->getData("s22");
if (freqS11.isEmpty()) {
throw std::invalid_argument("freqS11 is empty");
}
for(ComplexType complex : freqS11) {
S11_AmplitudeCurve->append(complex.toLogAmp());
}
} catch(std::exception &e) {
r4m->error(e.what());
deviceProblem = true;
return false;
}
mutex->unlock();
emit updateGraphS11f(S11_AmplitudeCurve);
Sleep(TIME_SHIFT);
}
// ...
- А если... дидлок?
- Та похуй... там всёрно каждый раз новый мьютекс создается...
Steve_Brown 21.12.2016 13:37 # 0
roman-kashitsyn 21.12.2016 14:00 # +3
Небось, с сишарпа пересели? Никогда не понимал, зачем выделять локальные переменные через new. Тупость же.
guestinho 21.12.2016 16:29 # 0
(Инфа старая, времен qt4.)
Antervis 21.12.2016 20:22 # +2
huesto 22.12.2016 00:07 # 0
guestinho 21.12.2016 16:32 # +2
roman-kashitsyn 21.12.2016 16:47 # +1
Here's an example of using the C++ API
Хотя хоть в коде к книге, который можно загрузить с сайта, такого треша почему-то нет.
barop 22.12.2016 03:17 # +2
Но может быть они хотели показать операторы new и delete?
CHayT 21.12.2016 16:35 # 0
Ed: Хотя фиг знает, скорее всего этот QVector и сам по себе никогда на стек не попадает.
guestinho 21.12.2016 16:42 # +5
roman-kashitsyn 21.12.2016 17:00 # 0
wvxvw тоже небось так и не знает, что не мешает ему писать простыни и обзывать всех вокруг дебилами
Antervis 21.12.2016 20:26 # 0
roman-kashitsyn 21.12.2016 16:43 # 0
CHayT 21.12.2016 21:05 # +1
Да дошло же уже, причём довольно быстро, см. Ed.
Очень давно кресты не трогал, а в няшной локальные массивы вполне себе на стек попадают, сработал рефлекс.
Antervis 21.12.2016 20:22 # 0
roman-kashitsyn 21.12.2016 20:24 # 0
>> с сишарпа пересели
> после курса джавы
Собственно, я почти угадал.
bayan 22.12.2016 00:43 # 0
И потому студентов джаве надо учить ПОСЛЕ сей, чтобы они сначала поняли что такое стек и куча, и как память работает, а не просто тупо копировали слово "new" как какую-то мантру
chtulhu 26.12.2016 13:01 # 0
Это я потом узнал про vm)
barop 26.12.2016 13:50 # 0
chtulhu 26.12.2016 14:06 # 0
barop 26.12.2016 14:10 # 0
chtulhu 27.12.2016 11:03 # 0
guest 27.12.2016 13:01 # 0
roman-kashitsyn 27.12.2016 13:44 # +1
Cоздавать объекты на стеке, а не в куче
The Java language does not offer any way to explicitly allocate an object on the stack, but this fact doesn't prevent JVMs from still using stack allocation where appropriate. JVMs can use a technique called escape analysis, by which they can tell that certain objects remain confined to a single thread for their entire lifetime, and that lifetime is bounded by the lifetime of a given stack frame. Such objects can be safely allocated on the stack instead of the heap. Even better, for small objects, the JVM can optimize away the allocation entirely and simply hoist the object's fields into registers.
-- http://www.ibm.com/developerworks/java/library/j-jtp09275/index.html
bayan 27.12.2016 19:14 # 0
Antervis 28.12.2016 07:50 # 0
bormand 28.12.2016 17:07 # 0
А она разве умеет всю? Вроде анализ утечек у нее весьма тупой - только на одну функцию.
ProctologistForYou 29.12.2016 22:53 # 0
sos 26.12.2016 13:51 # +1
barop 26.12.2016 13:53 # 0
А потом расплатк в виде гц
bormand 26.12.2016 17:03 # 0
Да в общем-то почти бесплатно, если объекты живут либо совсем мало либо очень долго. Дорого стоят только объекты, которые 2-3 сборки переживают и дохнут...
bayan 26.12.2016 21:42 # 0