小编Fra*_*acu的帖子

分离的pthreads和内存泄漏

有人可以向我解释为什么这个简单的代码泄漏内存?

我相信,由于pthreads是以脱离状态创建的,因此它们的资源应该在它终止后立即释放,但实际情况并非如此.

我的环境是Qt5.2.

#include <QCoreApplication>
#include <windows.h>

void *threadFunc( void *arg )
    {
    printf("#");
    pthread_exit(NULL);
    }

int main()
    {
    pthread_t thread;
    pthread_attr_t attr;

    while(1)
        {
        printf("\nStarting threads...\n");
        for(int idx=0;idx<100;idx++)
            {
            pthread_attr_init(&attr);
            pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
            pthread_create( &thread, &attr, &threadFunc, NULL);
            pthread_attr_destroy ( &attr );
            }
        printf("\nSleeping 10 seconds...\n");
        Sleep(10000);
        }
    }
Run Code Online (Sandbox Code Playgroud)

内存泄漏图

更新:

我发现,如果我添加的内部5毫秒稍有延迟for回路泄漏是WAY慢:

    for(int idx=0;idx<100;idx++)
        {
        pthread_attr_init(&attr);
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
        pthread_create( &thread, &attr, &threadFunc, NULL);
        pthread_attr_destroy ( &attr );
        Sleep(5); /// <--- 5 MILLISECONDS DELAY ///
        }
Run Code Online (Sandbox Code Playgroud)

内存泄漏图略有延迟 这让我很难过,有人可以告诉我发生了什么事吗?这种轻微的延迟如何产生如此重大的变化?(或以任何方式改变行为)

任何建议将不胜感激. …

c++ windows memory-leaks pthreads

13
推荐指数
1
解决办法
2751
查看次数

Qt Designer:创建小部件数组

也许这是一个愚蠢的问题,但我是C++和Qt的新手.很抱歉给您带来不便.

在Qt Designer中我创建了多个标签(例如):

my_label1
my_label2
my_label3
...
my_label n
Run Code Online (Sandbox Code Playgroud)

然后,如果我想隐藏它们,我会这样做:

ui->my_label1->hide();
ui->my_label2->hide();
ui->my_label3->hide();
...
ui->my_labeln->hide();
Run Code Online (Sandbox Code Playgroud)

但是我想定义像这样的标签

my_label[n]
Run Code Online (Sandbox Code Playgroud)

那么我就能做到这一点:

for(i=0;i<n;i++)
    {
    ui->my_label[n]->hide();
    }
Run Code Online (Sandbox Code Playgroud)

我读到我可以定义小部件,如:

QLabel* my_label[5];
Run Code Online (Sandbox Code Playgroud)

但有没有办法从Qt Designer做同样的事情?

提前致谢!

编辑:

最后我决定直接分配:

QLabel* my_label_array[5];
my_label_array[0] = ui->my_label1;
my_label_array[1] = ui->my_label2;
my_label_array[2] = ui->my_label3;
my_label_array[3] = ui->my_label4;
my_label_array[4] = ui->my_label5;
Run Code Online (Sandbox Code Playgroud)

然后我可以这样做:

for(idx=0;idx<6;idx++) my_label_array[idx]->show();
for(idx=0;idx<6;idx++) my_label_array[idx]->hide();
for(idx=0;idx<6;idx++) my_label_array[idx]->setEnabled(1);
for(idx=0;idx<6;idx++) my_label_array[idx]->setDisabled(1);
etc...
Run Code Online (Sandbox Code Playgroud)

然后我能够执行迭代.我相信这不是最干净的方法,但鉴于我对Qt的基本知识对我来说没问题.

非常感谢您的回答!这是一个伟大的网站与伟大的人.

arrays qt widget qt-designer

7
推荐指数
1
解决办法
9102
查看次数

PostgreSQL GROUP BY:另一个WHERE上的SELECT列第三列= x

假设我们在PostgreSQL中有两个表:

表"公民"

country_ref   citizen_name    entry_date
-----------------------------------------------------
0             peter           2013-01-14 21:00:00.000
1             fernando        2013-01-14 20:00:00.000
0             robert          2013-01-14 19:00:00.000
3             albert          2013-01-14 18:00:00.000
2             esther          2013-01-14 17:00:00.000
1             juan            2013-01-14 16:00:00.000
3             egbert          2013-01-14 15:00:00.000
1             francisco       2013-01-14 14:00:00.000
3             adolph          2013-01-14 13:00:00.000
2             emilie          2013-01-14 12:00:00.000
2             jacques         2013-01-14 11:00:00.000
0             david           2013-01-14 10:00:00.000
Run Code Online (Sandbox Code Playgroud)

表"国家"

country_id     country_name   country_group
-------------------------------------------
0              england        0
1              spain          0 
2              france         1
3              germany        1
Run Code Online (Sandbox Code Playgroud)

现在我想获得给定country_group的每个国家的"公民"表上最后输入的公民.

到目前为止,我最好的尝试是这个查询(我们称之为Query_1):

SELECT country_ref, MAX(entry_date) FROM citizens 
LEFT JOIN …
Run Code Online (Sandbox Code Playgroud)

sql postgresql greatest-n-per-group

3
推荐指数
1
解决办法
6844
查看次数