普通工作线程在循环中运行,在该循环中,它检查队列中的可用任务并使用它们.我似乎有一些例子,例如,当没有可用的任务时,线程会等待几毫秒std::this_thread::sleep_for().但是,我希望我的线程以最小的延迟消耗任务,因此我不使用睡眠.这有什么不好吗?在检查任务时,工作线程应该睡眠几毫秒吗?
例如,取输入字符串Street42/53.我想把它分成数字运行,所以我得到了['Street', '42, '/', '53'].我尝试了一个正则表达式,但问题是表达式(?<=\d)(?!=\d)没有匹配的实际字符.所以我尝试用不常见的角色替换匹配并在其上拆分.
import re
delimiter = re.compile(r'(?<=\d)(?!=\d)')
re.sub('Street42/53', '\f').split('\f')
Run Code Online (Sandbox Code Playgroud)
但是,这只返回两个空字符串的列表.如何在Python中拆分数字?为了澄清,只要数字位于非数字旁边,但只是数字或只是非数字的内部运行,就会发生拆分.
阅读这个关于方法排序的问题,我思考了在Python中将受保护的方法放在哪里以及它们应该是私有的_method(self)还是公共的method(self)。我知道 Python 不提供受保护方法的语言功能。
私有:按照约定,以下划线开头的属性是私有的。通常仍然可以从外部访问它们,但不应该。用下划线开头的受保护方法感觉很奇怪,因为不清楚子类实际上重写了该方法而不是声明它自己的实现细节。
Public:没有下划线,更有可能有人会查看基类以查看该方法是否已经存在。因此,这对于子类化的人来说更好。然而,想要使用子类的人不知道该方法只是一个实现细节,可能会尝试从外部调用它。
在 Python 中定义受保护方法的首选方法是什么?
我想在 Windows 窗体上绘制许多不同的形状。以下代码仅适用于矩形。
// render list contains all shapes
List<Rectangle> DrawList = new List<Rectangle>();
// add example data
DrawList.Add(new Rectangle(10, 30, 10, 40));
DrawList.Add(new Rectangle(20, 10, 20, 10));
DrawList.Add(new Rectangle(10, 20, 30, 20));
// draw
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
foreach (Rectangle Object in DrawList)
{
g.FillRectangle(new SolidBrush(Color.Black), Object);
}
}
Run Code Online (Sandbox Code Playgroud)
如何改进代码以处理任何类型的形状,如矩形、直线、曲线等?
我想我需要一个可以包含不同类型对象的列表和一个根据形状类型绘制任何对象的函数。但不幸的是,我不知道该怎么做。
我有以下结构.
struct ShaderObject
{
const GLchar* File;
ShaderType Type;
GLuint Shader;
ShaderObject(const GLchar* File, ShaderType Type);
};
Run Code Online (Sandbox Code Playgroud)
而这种类型的地图.
typedef map<string, ShaderObject> Shaders;
Run Code Online (Sandbox Code Playgroud)
编译器给我一个错误,链接到执行map.
Error 1 error C2512: 'ShaderObject::ShaderObject': No appropriate default constructor
available c:\program files (x86)\microsoft visual studio 11.0\vc\include\map 198 1
Run Code Online (Sandbox Code Playgroud)
我不明白这个错误.我该如何解决?因为我以前从来没有这样的错误,我无法解释,我不确定你需要哪些信息.请随时询问详情!非常感谢!
在C++中有一个名为的标准库函数cout,它允许我将文本发送到控制台.我相信你知道的.
#include <iostream>
using std::cout;
cout << "Some Text " << 15 << " Other Text";
Run Code Online (Sandbox Code Playgroud)
要在最后做一个换行,我需要使用endl.
cout << "Some Text " << 15 << " Other Text" << endl;
Run Code Online (Sandbox Code Playgroud)
我怎样才能编写一个coutl行为相似的函数,cout但也添加了一个像?我想使用与使用相同的语法cout,尤其是<<运算符.
coutl << "Some Text " << 15 << " Other Text"; // coutl should add a linebreak
Run Code Online (Sandbox Code Playgroud) 给定两个数组,如何将两者的组合传递给函数,最好使用内联语法?
var current = [1.01, 3.01, 2.42, 4.31];
var preview = [0.89, 3.15];
/*
* pass both combined to a function, this is fictional syntax.
* display(current + preview);
*/
Run Code Online (Sandbox Code Playgroud)
我的意思是内联语法来创建一个传递的临时数组.我不希望修改我的一个数组.
当我将一些标志传递给函数时,只有它们的值在函数调用中可见.程序员必须在函数定义中查找值对应的内容.这通常意味着查看不同的位置或再次开始键入函数调用以显示IDE提示.
// function definition in header file
void foo(bool output = false, bool formatted = false, bool debug = false);
// function call, it is not intuitive what the values mean
foo(true, false, true);
Run Code Online (Sandbox Code Playgroud)
是否有编码技术来解决这个问题?例如,这个伪代码会更直观,但显然不是有效的C++.
// function call with explicit mention of flags that should be true
foo(output, debug);
Run Code Online (Sandbox Code Playgroud)
我知道有很多选项可以明确提到这些选项,通常需要计算或语法的开销,比如使用std::unordered_map选项.使用C++ 11初始化列表时,语法开销变得更少.但是,如果存在,我想坚持一个普遍的做法.
我的应用程序中有一个全局事件管理器.每个组件都可以监听事件并触发它们.我们来看看窗口组件.它拥有一个std::vector窗口,它会定期迭代以处理输入等等.此外,它会在"keydown"事件中注册,以便在按下退出键时删除活动窗口.
class window : public module {
window() {
// Listen to key event
listen("keydown", [=](size_t index, int code) {
if (code == 27) {
windows[index].close();
windows.erase(windows.begin() + index);
}
});
}
void update() {
for (auto i = windows.begin(); i != windows.end(); i++) {
if (i->is_open()) // On remove, crashes at this line.
// ...
}
}
};
Run Code Online (Sandbox Code Playgroud)
问题是当"keydown"事件被触发时,无论是从更新循环内部还是从另一个线程触发,代码都会崩溃.我想这是因为在擦除元素后迭代器不再有效.在不知道何时发生擦除的情况下,如何安全地迭代变化的向量?
该错误表示i无法取消引用.我尝试通过try catch块包装循环体,但是没有异常可以捕获,只是来自Visual Studio的调试断言.