我正在使用GTK,我已经CheckButton在窗口中插入了(GTK版本的复选框).现在我需要得到它是否被检查.我怎么做?
我需要制作每个系统行为不同的脚本。今天,甚至可以在 microsoft windows、mac、linux、hp-ux、solaris 等系统上运行 bash...
如何确定我在这些操作系统中的哪一个?我不需要确切的版本,我只需要知道我是否在 windows、linux、solaris 上...
当我在进程上调用kill()时,它会立即返回,因为它只是发送一个信号.我有一个代码,我在一个循环中无限地检查一些(外来的,不是由我编写或可修改的)进程,如果它们超过某些限制(太多ram吃掉等)它会杀死它们(并写入syslog等).
问题是,当进程被大量交换时,它需要很多秒才能终止它们,因此,我的进程多次对相同的进程执行相同的检查,并尝试多次向同一进程发送信号,并将其写入syslog同样.(这不是故意的,只是我试图解决的副作用)
我不关心它发送信号的次数,但我关心它写入syslog的次数.我可以保留已经发送了杀死信号的PID列表,但理论上,即使可能性很低,也可能会有另一个进程产生与先前被杀死的pid相同的pid,这也可能被认为是被杀死的在这种情况下,日志将丢失.
我不知道是否有任何进程的唯一标识符,但我对此表示怀疑.我怎么能同步杀死一个进程,或者跟踪获得信号的进程并且不需要再次记录?
我有一个qt应用程序,我想在其中实现python解释器,以便我可以使用python脚本扩展它.虽然这适用于常规C++应用程序,包括Python.h,即使对于大多数简单,空Qt4项目总是会导致:
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++-64 -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4 -I/usr/include/python3.2mu -I. -o main.o main.cpp
In file included from /usr/include/python3.2mu/Python.h:8:0,
from main.cpp:16:
/usr/include/python3.2mu/pyconfig.h:1182:0: warning: "_POSIX_C_SOURCE" redefined [enabled by default]
/usr/include/features.h:164:0: note: this is the location of the previous definition
/usr/include/python3.2mu/pyconfig.h:1204:0: warning: "_XOPEN_SOURCE" redefined [enabled by default]
/usr/include/features.h:166:0: note: this is the location of the previous definition
In file included from /usr/include/python3.2mu/Python.h:67:0,
from main.cpp:16:
/usr/include/python3.2mu/object.h:402:23: error: expected unqualified-id before ‘;’ token
make: *** [main.o] …Run Code Online (Sandbox Code Playgroud) 有效并由 gcc 编译但不是由 VS 编译器编译的示例代码:
#include <cmath>
int main()
{
float x = 1233.23;
x = round (x * 10) / 10;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但出于某种原因,当我在 Visual Studio 中编译它时,我收到一个错误:
C3861: 'round': identifier not found
Run Code Online (Sandbox Code Playgroud)
即使cmath有人在这里建议,我也包括在内:http : //www.daniweb.com/software-development/cpp/threads/270269/boss_loken.cpp147-error-c3861-round-identifier-not-found
这个函数只在 gcc 中吗?
我下载了一个大型存储库的最新版本,我需要获取一个分支的最新版本,以便我可以测试它.
我怎么做?
当我这样做的时候,git clone --depth 1 url我得到了master的最后修订版,而且这个分支似乎不存在?
petanb@petrbena:~/Documents/mh$ git checkout flaggedrevs
error: pathspec 'flaggedrevs' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud) 我有一个问题对你们中的一些人有明显的答案,但我无法弄清楚.
QMessageBox http://qt-project.org/doc/qt-5/qmessagebox.html有两种显示方式,你要么exec()停止程序执行直到用户关闭消息框,要么show()只显示框(可能是在单独的线程中或以某种方式允许程序在框等待用户时继续).
使用show()后如何删除该框?
此代码立即关闭它,消息框出现纳秒,然后它消失了:
QMessageBox *mb = new QMessageBox(parent);
mb->setWindowTitle(title);
mb->setText(text);
mb->show();
delete mb; // obvious, we delete the mb while it was still waiting for user, no wonder it's gone
Run Code Online (Sandbox Code Playgroud)
这段代码也是这样
QMessageBox mb(parent);
mb.setWindowTitle(title);
mb.setText(text);
mb.show();
// obvious, as we exit the function mb which was allocated on stack gets deleted
Run Code Online (Sandbox Code Playgroud)
此代码也是如此
QMessageBox *mb = new QMessageBox(parent);
mb->setWindowTitle(title);
mb->setText(text);
mb->show();
mb->deleteLater(); // surprisingly this doesn't help either
Run Code Online (Sandbox Code Playgroud)
那么如何正确使用show(),而不必以某种复杂的方式处理它的删除?是否有类似deleteOnClose()功能的东西只会告诉它在用户关闭后自行删除?
我正在创建一个客户端服务器应用程序,现在我正在处理一种最简单的方法来序列化一些类,传递到另一端,然后放回我以后可以使用的类中。
我意识到这并不简单,有些人可能会说在 C 或 C++ 等低级语言中不可能,但实际上通过大量编码是可行的。我想知道其他人是否已经为此创建了一个解决方案,该解决方案是便携的并且可以工作,因此我不需要重新发明轮子。
目前我的解决方案(可能有点太复杂了):
每个要序列化和反序列化的类都继承自Serializable包含 2 个函数的抽象类:
QHash<QString, QVariant> ToHash();
void LoadHash(QHash<QString, QVariant> hash);
Run Code Online (Sandbox Code Playgroud)
第一个函数创建一个包含所有公共和私有变量的 QHash。第二个函数加载这个散列并填充它们所属的值。这样我就可以根据需要将需要序列化的每个结构转换为QHash和返回。
现在棘手的部分是通过网络将其交付给另一方。我决定为此创建一个超级简单的 TCP 协议。
我可以使用QDataStream以将其QHash转换为字节数组,并且(文档说,虽然我担心可能会有一些隐藏的警告)重新QHash使用相同的类。
这意味着,我有一种方法可以将结构序列化为QByteArray's 并且我可以将它们转换回来,现在我需要发送和接收它们。
因为我正在传输二进制数据,所以我决定不对这些“数据块”使用某种分隔符,因为我不想弄乱这些分隔符的复杂转义,而是决定创建一个固定大小的标头(我存储常量中的字节大小称为HEADER_SIZE,目前为 8 个字节)。客户端和服务器上的标头大小必须相同。
我要做的是获取生成的QByteArray(序列化类),获取其大小并从中创建完全长HEADER_SIZE字节的标头,在其中放入实际大小的序列化结构并将其添加到QByteArray. 然后我将这个数组发送到另一边。
另一方面,我正在等待第一个HEADER_SIZE字节,然后获得与标头中描述的一样多的字节,QHash从它形成背面。(我还没有这个代码,它现在只是一个理论算法)。
这是正确的方法吗?没有更简单的方法吗?或者已经为我解决了这个问题的东西?是否有一些我应该注意的警告?
只是为了让它更清楚一点,这是我想要做的这个伪图:
我一直在观看编程中的一些奇怪的现象已经有一段时间了,因为在Linux系统上默认启用了overcommit.
在我看来,几乎每个高级应用程序(例如,用Java,Python或C#等高级编程语言编写的应用程序,包括用C++编写的一些使用大型库(如Qt)的桌面应用程序)都会使用大量的虚拟操作内存.例如,Web浏览器在使用仅300MB的RAM时分配20GB的内存是正常的.或者对于dektop环境,mysql服务器,几乎每个java或单声道应用程序等,都要分配数十GB的RAM.
为什么会这样?有什么意义?这有什么好处吗?
我注意到当我在linux中禁用overcommit时,如果桌面系统实际上运行了很多这些应用程序,系统就会变得无法使用,因为它甚至无法正常启动.
我有一个变量PyObject,我知道是一个Python bool.它是True或False(例如.Py_True或Py_False).现在我想以某种方式将其转换为C++.
使用字符串执行此操作并不是很难,有一个辅助函数 - PyBytes_AsString将python字符串转换为C字符串.现在我需要像boolean那样的东西(或者因为boolC中没有,所以需要int ).
或者如果没有转换,也许某些功能可以与true或false进行比较?有点像int PyBool_IsTrue(PyObject*)?
以下是一些示例代码,可以更轻松地理解我需要的内容:
#include <Python.h>
int main()
{
/* here I create Python boolean with value of True */
PyObject *b = Py_RETURN_TRUE;
/* now that I have it I would like to turn in into C type so that I can determine if it's True or False */
/* something like */
if (PyBool_IsTrue(b))
{ /* it's true! …Run Code Online (Sandbox Code Playgroud) c++ ×4
qt ×3
c ×2
linux ×2
python ×2
bash ×1
c# ×1
git ×1
gtk ×1
gtk# ×1
memory ×1
networking ×1
process ×1
python-c-api ×1
qmessagebox ×1
visual-c++ ×1