我想用Qt编程,但我不想使用特殊的编译器或IDE,如Qt Creator和qmake.我想用Kate编写并用g ++编译.
我可以编译一个使用Qt和g ++的程序吗?如何用g ++编译它?
在该文件中file1.c,调用在文件中实现的函数file2.c.当我链接file1.o,并file2.o为可执行文件,如果该功能file2是非常小的,将连接器自动检测功能小,内联呼吁?
我想知道如何创建一个简单的桌面环境,如KDE,Gnome和LXDE,用于Linux,或者特别是Ubuntu/Kubuntu,但我不知道如何开始以及它有多复杂.
我想创建一个简单,高效和轻量级的桌面,并重现KDE,Gnome和Windows XP的一些优秀功能.我不想重新发明轮子,我想设计图形界面和主要对话框.
我可以在Qt中使用C++,也可以使用X11调用.像TWM这样的简单桌面将是第一步,然后我可以添加任务栏,开始菜单,新功能和玩新想法.
谢谢.
编辑
我安装了icewm,我认为这是我需要开始的.在登录屏幕上,我可以选择是使用KDE(桌面环境)还是使用icewm(窗口管理器).我不明白窗口管理器究竟是什么.
我已经下载了icewm源代码,我很困惑.我必须理解一些概念,例如,加载桌面后登录屏幕后会发生什么,窗口如何工作等等.
编辑2
我想我需要一个很好的教程.我必须了解Window Manager或桌面环境的工作原理.我必须知道一些概念.
我想学习如何使用新的C++标准库创建多个线程并将其句柄存储到数组中.
我该如何开始一个帖子?
我看到的示例使用构造函数启动一个线程,但如果我使用数组,则无法调用构造函数.
#include <iostream>
#include <thread>
void exec(int n){
std::cout << "thread " << n << std::endl;
}
int main(int argc, char* argv[]){
std::thread myThreads[4];
for (int i=0; i<4; i++){
//myThreads[i].start(exec, i); //?? create, start, run
//new (&myThreads[i]) std::thread(exec, i); //I tried it and it seems to work, but it looks like a bad design or an anti-pattern.
}
for (int i=0; i<4; i++){
myThreads[i].join();
}
}
Run Code Online (Sandbox Code Playgroud) 我想知道如何为旧游戏机编程以获得乐趣.
我可以使用C等编程语言吗?我必须使用组装吗?我不知道任何控制台编译器,汇编程序或API.我需要编译成ROM映像并使用模拟器进行测试,因为我没有任何控制台.
每个控制台都有其有趣的功能,我想和它们一起玩.
我有两个问题,第一个问题已经解决了.
当前问题
如果我嵌入了一个需要加载库的文件,例如jpeg图像或mp3音乐,我将需要使用该文件作为库的输入.但是,每个库都是不同的,并使用一种方法来获取文件作为输入,输入可以是文件名或FILE*指针(来自libc的文件界面).
我想知道如何访问带有名称的嵌入式文件.如果我创建一个临时文件,那将是低效的,还有另外一种方法吗?我可以将文件名映射到内存吗?我的平台是Windows和Linux.
如果show_file(const char*name)是库中的函数,我将需要一个字符串来打开该文件.
我已经看到了这些问题:
如何在内存中获取缓冲区的文件描述符?
从C中的文件描述符获取文件名
以下代码是我的解决方案.这是一个好的解决方案吗?它效率低下吗?
# include <stdio.h>
# include <unistd.h>
extern char _binary_data_txt_start;
extern const void* _binary_data_txt_size;
const size_t len = (size_t)&_binary_data_txt_size;
void show_file(const char* name){
FILE* file = fopen(name, "r");
if (file == NULL){
printf("Error (show_file): %s\n", name);
return;
}
while (true){
char ch = fgetc(file);
if (feof(file) )
break;
putchar( ch );
}
printf("\n");
fclose(file);
}
int main(){
int fpipe[2];
pipe(fpipe);
if( !fork() ){
for( int buffsize = len, done …Run Code Online (Sandbox Code Playgroud) 我想知道如何在Windows上使用类似Unix Domain Socket的东西.
行为是:进程将是一个"服务器"并从其他进程接收连接,它可以保留和使用来自不同进程的连接,就像TCP套接字一样.
IP套接字不是解决方案,因为它需要选择端口,来自其他应用程序的进程可能需要所选端口,并且可以在网络中看到开放端口.
我不知道命名管道是否可以接收和保留多个客户端,但我没有看到如何区分不同的客户端.并且它没有提供一种方法来等待来自多个连接的数据,例如select.
一个老问题说关于使用命名管道,但它没有解释如何使用命名管道来获得所需的行为.Windows中的AF_UNIX
我没有看到如何获取特定客户端的句柄.
我想实现自己的动态内存管理系统,以添加有助于在C++中管理内存的新功能.
我使用Windows(XP)和Linux(Ubuntu).实现'malloc'和'free'等功能需要什么?我认为我必须使用最低级别的系统调用.
对于Windows,我找到了函数:GetProcessHeap,HeapAlloc,HeapCreate,HeapDestroy和HeapFree.
对于Linux,我没有找到任何系统调用堆管理.在Linux上,malloc和free是系统调用,不是吗?
谢谢
编辑:
C++不提供垃圾收集器和垃圾收集器很慢.有些分配很容易免费,但有些分配需要垃圾收集器.
我想实现这些函数并添加新功能:
*每当调用free()时,检查指针是否属于堆.
*帮助垃圾收集.我必须存储有关已分配块的一些信息.
*使用多个堆(Windows上的HeapCreate/HeapDestroy).我可以快速删除整个堆及其分配的块.
有两种方法可以使用lambda函数变量:
std::function<int(int, int)> x1 = [=](int a, int b) -> int{return a + b;};
//usage
void set(std::function<int(int, int)> x);
std::function<int(int, int)> get();
Run Code Online (Sandbox Code Playgroud)
和:
std::function<int(int, int)>* x2 = new std::function<int(int, int)>([=](int a, int b) -> int{return a + b;});
//usage
void set(std::function<int(int, int)>* x);
std::function<int(int, int)>* get();
Run Code Online (Sandbox Code Playgroud)
我想知道有什么不同,因为我不知道lambda函数数据是如何存储的.
我想知道在性能,内存使用和传递lambda函数作为参数或返回lambda函数的最佳方法方面的最佳方法.
如果lambda函数对象的大小大于4,或者为了避免错误(如果在执行归因时执行某种复制构造函数或者在我不需要时执行某种析构函数),我更喜欢使用指针.
我该如何声明lambda函数变量?
编辑
我想避免复制和移动,我想继续再次使用相同的功能.
我应该如何改变这个例子?
int call1(std::function<int(int, int)> f){
return f(1, 2);
}
int call2(std::function<int(int, int)> f){
return f(4, 3);
}
std::function<int(int, int)>& recv(int s){
return [=](int a, int b) -> int{return …Run Code Online (Sandbox Code Playgroud) 什么是 Direct3D?它是一个 API,不是吗?它是由 Windows 实现的还是由图形卡实现的?
如果显卡实现了 Direct3D API,为什么其他操作系统不能使用显卡中的 Direct3D 资源?
如果 Windows 实现 Direct3D,则必须使用图形卡资源,例如 OpenGL 或 OpenCL。如果 Direct3D 调用不是直接到显卡,会因为中间调用而变慢。
请帮助我理解什么是 Direct3D。