小编MiJ*_*Jyn的帖子

显示GTK调试日志消息

我是GTK +的新手,我正在开始我的第一个项目(一个窗口管理器).我的问题是:我编写了一个包含大量调试消息的程序,编写如下:

g_debug("foo");
...
g_debug("bar");
Run Code Online (Sandbox Code Playgroud)

我只是想知道如何显示它们,因为它们在运行应用程序时不显示.我试过像这样运行应用程序:

./foobar --gtk-debug=all --gdk-debug=all
Run Code Online (Sandbox Code Playgroud)

但调试消息仍然没有显示.我确定我错过了一些东西,但我似乎无法找到方法(在问这个之前用Google搜索了一下,相信我).

提前致谢!

c gtk logging

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

是否可以重复getopt

我正在尝试使用内置命令创建一个基本shell,我遇到了一些getopt问题.这是输出(使用valgrind):

$ mkdir -p foo/bar
mkdir
-p
foo/bar
FLAGON
$ mkdir -p foo/test
mkdir
-p
foo/test
==15377== Invalid read of size 1
==15377==    at 0x5201BBE: _getopt_internal_r (in /usr/lib/libc-2.17.so)
==15377==    by 0x5202CEA: _getopt_internal (in /usr/lib/libc-2.17.so)
==15377==    by 0x5202D37: getopt (in /usr/lib/libc-2.17.so)
==15377==    by 0x40351A: shell_ns_cmd_mkdir (shell.c:542)
==15377==    by 0x403AB4: normal_shell_cb (shell.c:610)
==15377==    by 0x402E8E: shell_mainloop (shell.c:402)
==15377==    by 0x401B67: main (main.c:52)
==15377==  Address 0x54e0912 is 2 bytes inside a block of size 3 free'd
==15377==    at 0x4C2AD3C: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15377== …
Run Code Online (Sandbox Code Playgroud)

c getopt

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

如何在linux中检查CD驱动器是打开还是关闭?

我正在制作一个应用程序,需要知道CD驱动器是打开还是关闭.

eject 打开CD驱动器,并检查打开所需的时间(更短的时间说它打开,更长,好......),但我不能使用这种技术,因为应用程序实际打开驱动器(和我如果驱动器关闭,不想重新打开驱动器,如果驱动器打开,我也不想关闭它.

我怎么在linux上这样做?我看到可以在Windows下执行此操作(虽然可能是错误的),但我还没有看到在linux上执行此操作的方法.

如果使用linux API调用是不可能的,是否可以实现可以执行此操作的低级函数?

c c++ linux cd-drive

7
推荐指数
2
解决办法
2795
查看次数

如何检查界面是否已启动

标题几乎说明了一切.如果我跑ifconfig,我得到这个:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet -snip-  netmask 255.255.255.0  broadcast -snip-
    ...
Run Code Online (Sandbox Code Playgroud)

使用它,我可以知道它是否已启动(<UP,...),但我希望能够在C(或C++,如果有更简单的解决方案)中执行此操作,而不依赖于解析外部进程.


这是我到目前为止所做的(不起作用):

bool is_interface_online(std::string interface) {
    struct ifreq ifr;
    int sock = socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP);
    memset(&ifr, 0, sizeof(ifr));
    strcpy(ifr.ifr_name, interface.c_str());
    if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) {
            perror("SIOCGIFFLAGS");
    }
    close(sock);
    return !!(ifr.ifr_flags | IFF_UP);
}
Run Code Online (Sandbox Code Playgroud)

任何人都能指出我正确的方向吗?

c++ linux ioctl

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

如何在不结束C++程序的情况下结束ncurses?

我一直在尝试制作一个ncurses程序,它将在某一点结束ncurses模式,并在正常的终端模式下恢复,但仍然保持程序运行.可能吗?endwin();结束程序.这是我的代码(不要担心功能,我之前做过):

clear();
refresh();
endwin();
boxmessage("STEP 1");
consolewrite("Removing Popularity Contest...");
std::vector<std::string> removepak;
removepak.push_back("popularity-contest");
removepackages(removepak);
Run Code Online (Sandbox Code Playgroud)

c++ linux ncurses

6
推荐指数
1
解决办法
2824
查看次数

Web Audio API:noteOn后noteOff不工作?

我使用Web Audio API编写了一个简单的Web应用程序,但我注意到当我noteOn(0)向给定的源发出命令,然后是a noteOff(0),然后最后通过另一个noteOn(0)命令时,声音将打开,关闭(如预期的那样) )但是然后不会打开第三个命令.

有什么我做错了吗?就这么简单,我可以向你展示代码,但我觉得它是多余的.也许我需要在缓冲区之后重新分配缓冲区noteOff,但是我无法想象它是如何被使用的.

javascript web-audio-api

6
推荐指数
1
解决办法
5247
查看次数

克隆音频对象

我知道如何克隆对象,但我想知道如何克隆音频对象?我应该以与克隆对象不同的方式克隆它吗?

“说明”我的意思:

var audio = new Audio("file.mp3");
var audio2 = $.extend({}, audio); // Clones `audio`
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?

我问这个的原因是我希望能够同时多次播放相同的声音。

html javascript audio

6
推荐指数
2
解决办法
2849
查看次数

SDL2 - 检查是否已创建OpenGL上下文

我正在使用SDL2和OpenGL创建一个应用程序,它在3台不同的计算机上运行良好.但是在另一台计算机(更新的arch linux)上,它没有,它崩溃了这个错误:

OpenGL context already created
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:如何检查是否已经创建了OpenGL上下文?然后,如果它已经创建,我该如何获得它的处理?

如果我不能这样做,我该如何绕过这个问题?

c++ linux opengl openglcontext sdl-2

6
推荐指数
1
解决办法
1525
查看次数

如何在 ncurses 中重新定义颜色对?

标题应该说明一切,所以说我创建了一个像这样的颜色对:

init_pair(1, COLOR_RED, COLOR_BLACK);
Run Code Online (Sandbox Code Playgroud)

然后我想重新定义它,如下所示:

init_pair(1, COLOR_GREEN, COLOR_BLUE);
Run Code Online (Sandbox Code Playgroud)

现在这不起作用,但是还有其他功能可以让我这样做吗?或者,到底有没有函数可以让我只使用显式的前景色/背景色而不使用颜色对?

预先感谢,如果这还不够清楚,请告诉我。


编辑:尝试后,您可以使用重新定义对init_pair,而我的代码中的问题出在其他地方。

c ncurses

5
推荐指数
1
解决办法
3104
查看次数

高效内存std :: map替代

我正在使用std::map来存储大约2000万个条目。如果存储它们时没有任何容器开销,那么将需要大约650MB的内存。但是,由于它们是使用存储的std::map,因此会占用约15GB的内存(即过多)。

我使用an的原因std::map是因为我需要找到等于/大于/小于的键x。这就是为什么类似的东西sparsehash行不通的原因(因为使用它,我无法通过比较找到密钥)。

是否有替代使用std::map(或通常使用有序映射)的方法,从而减少了内存使用量?

编辑:写性能高于读取性能更重要。它可能只会读取约10个条目,但我不知道它将读取哪些条目。

c++ database memory stdmap

5
推荐指数
3
解决办法
2576
查看次数