我是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搜索了一下,相信我).
提前致谢!
我正在尝试使用内置命令创建一个基本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) 我正在制作一个应用程序,需要知道CD驱动器是打开还是关闭.
eject 打开CD驱动器,并检查打开所需的时间(更短的时间说它打开,更长,好......),但我不能使用这种技术,因为应用程序实际打开驱动器(和我如果驱动器关闭,不想重新打开驱动器,如果驱动器打开,我也不想关闭它.
我怎么在linux上这样做?我看到可以在Windows下执行此操作(虽然可能是错误的),但我还没有看到在linux上执行此操作的方法.
如果使用linux API调用是不可能的,是否可以实现可以执行此操作的低级函数?
标题几乎说明了一切.如果我跑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)
任何人都能指出我正确的方向吗?
我一直在尝试制作一个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) 我使用Web Audio API编写了一个简单的Web应用程序,但我注意到当我noteOn(0)向给定的源发出命令,然后是a noteOff(0),然后最后通过另一个noteOn(0)命令时,声音将打开,关闭(如预期的那样) )但是然后不会打开第三个命令.
有什么我做错了吗?就这么简单,我可以向你展示代码,但我觉得它是多余的.也许我需要在缓冲区之后重新分配缓冲区noteOff,但是我无法想象它是如何被使用的.
我知道如何克隆对象,但我想知道如何克隆音频对象?我应该以与克隆对象不同的方式克隆它吗?
“说明”我的意思:
var audio = new Audio("file.mp3");
var audio2 = $.extend({}, audio); // Clones `audio`
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
我问这个的原因是我希望能够同时多次播放相同的声音。
我正在使用SDL2和OpenGL创建一个应用程序,它在3台不同的计算机上运行良好.但是在另一台计算机(更新的arch linux)上,它没有,它崩溃了这个错误:
OpenGL context already created
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:如何检查是否已经创建了OpenGL上下文?然后,如果它已经创建,我该如何获得它的处理?
如果我不能这样做,我该如何绕过这个问题?
标题应该说明一切,所以说我创建了一个像这样的颜色对:
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,而我的代码中的问题出在其他地方。
我正在使用std::map来存储大约2000万个条目。如果存储它们时没有任何容器开销,那么将需要大约650MB的内存。但是,由于它们是使用存储的std::map,因此会占用约15GB的内存(即过多)。
我使用an的原因std::map是因为我需要找到等于/大于/小于的键x。这就是为什么类似的东西sparsehash行不通的原因(因为使用它,我无法通过比较找到密钥)。
是否有替代使用std::map(或通常使用有序映射)的方法,从而减少了内存使用量?
编辑:写性能远高于读取性能更重要。它可能只会读取约10个条目,但我不知道它将读取哪些条目。