我有一个如此定义的结构:
typedef struct _CONFIGURATION_DATA {
BYTE configurationIndicator;
ULONG32 baudRate;
BYTE stopBits;
BYTE parity;
BYTE wordLength;
BYTE flowControl;
BYTE padding;
} CONFIGURATION_DATA;
Run Code Online (Sandbox Code Playgroud)
现在,通过我的计算,该结构长度为10个字节.但是,sizeof报告它长16个字节?谁知道为什么?
我正在使用Windows DDK中的构建工具进行编译.
我知道什么时候delete []会导致所有数组元素的破坏,然后释放内存.
我最初认为编译器希望它只是为数组中的所有元素调用析构函数,但我还有一个反对的参数:
堆内存分配器必须知道分配的字节大小,并使用sizeof(Type)它可能找不到元素,并为数组调用适当的no析构函数以防止资源泄漏.
所以我的假设是正确与否,请清楚我对它的怀疑.
所以,我没有得到的使用[]中delete []?
首先,我要说我不使用DefaultTreeModel.我实现了自己的TreeModel,所以我不能使用DefaultXXX.问题是:通过我的模型定义的一些addStuff()方法,我将节点添加到底层数据结构.然后我通过调用addStuff()函数中的treeNodesChanged()来通知监听器(我知道有treeNodesInserted方法,但它是一样的.它只是用不同的方法通知监听器).现在,其中一个监听器是我的主窗体中的静态类,这个监听器可以告诉JTree,它也包含在我的主窗体中,用于刷新自身.如何告诉JTree从模型中"重新加载"其部分或全部节点?
更新:发现这个问题虽然不完全相同,但它给出了我想要的答案.
更新2:我的问题不是如何通知查看器(JTree),而是在模型通知后应该以什么方式重新加载jtree.
首先让我说,我知道刷新树以反映底层更改的唯一方法是调用updateUI(),或重用setModel()方法.基本上,我的问题是:
假设TreeModelListener刚刚通过(通过TreeModelListener API)通知模型中发生了更改.好的,现在呢?
我有这个问题,因为JTree没有实现TreeModelListener.因此,在我的情况下,监听器是JTree的容器,或实现监听器的内部类,与Jtree位于同一容器中.
所以假设我是一个TreeModelListener实现,和我的兄弟JTree一起幸福地生活在一个JForm中.突然我的方法treeNodesInserted(TreeModelEvent evt)被调用.现在我该怎么做?如果我从我内部调用Jtree.updateUI(),那么模型的侦听器List会抛出ConcurrentModification异常.我可以调用updateUI以外的其他东西吗?
我尝试了很多东西,但只有updateUI刷新了JTree.所以我在听众之外做了.从JForm,我只是调用模型的方法来改变不正常的结构,然后我调用updateUI.没有使用TreeModelListener.
UPDATE3:我发现注册了隐式TreeModelListeners.在我的模型的addTreeModelListener(TreeModelListener监听器)实现中,我放了一个debug system.out行:
System.out.println("listener added: " + listener.getClass().getCanonicalName());
Run Code Online (Sandbox Code Playgroud)
当我执行jTree.setModel(model)时,我看到了这个调试输出:
监听器添加:javax.swing.JTree.TreeModelHandler
监听器添加:javax.swing.plaf.basic.BasicTreeUI.Handler
引发ConcurrentModificationException是因为对jtree.updateUI()的调用会重新注册侦听器(只有plaf,而不是两者),因此当我在侦听器通知循环中调用updateUI时会抛出它.现在刷新树的唯一方法是在TreeModelListener之外进行.有关更好解决方案的任何意见或想法吗?我错过了什么吗?
在嵌入式软件(固件)领域,通过让 PIO 线摆动并在示波器上捕获其行为来观察事件顺序、计时和优化程序是相当常见的。
在过去,可以通过切换串行和并行端口上的引脚来在基于 PC 的软件上实现几乎相同的功能。这使得在同一跟踪上捕获基于主机 PC 的软件事件和固件事件并检查主机软件/固件交互成为可能。
现在,我的新笔记本电脑...没有串行或并行端口!这种情况越来越多。那么,有人对如何从“现代”PC 发出准确的定时信号有任何建议吗?让我震惊的是,我们没有任何立即可编程、无滞后的输出引脚了。
该解决方案需要在笔记本电脑上运行,因此不允许使用仅插入台式机的附加卡。
我怎么能避免这个字典(或动态创建它)?
Dictionary<Type,Type> CorrespondingNullableType = new Dictionary<Type, Type>
{
{ typeof(bool), typeof(bool?) },
{ typeof(byte), typeof(byte?) },
{ typeof(sbyte), typeof(sbyte?) },
{ typeof(char), typeof(char?) },
{ typeof(decimal), typeof(decimal?) },
{ typeof(double), typeof(double?) },
{ typeof(float), typeof(float?) },
{ typeof(int), typeof(int?) },
{ typeof(uint), typeof(uint?) },
{ typeof(long), typeof(long?) },
{ typeof(ulong), typeof(ulong?) },
{ typeof(short), typeof(short?) },
{ typeof(ushort), typeof(ushort?) },
{ typeof(Guid), typeof(Guid?) },
};
Run Code Online (Sandbox Code Playgroud) 请看下面我的代码.我试图将参数数组绑定到我准备好的语句中.我一直在网上浏览,可以看到我必须使用call_user_func_array,但无法让它工作.我得到的错误是:"第一个参数应该是一个有效的回调,'数组'被给出"我可能是错的,但我假设第一个参数可以是一个数组,也许这个错误信息是误导性的.我认为问题是我的阵列在某种程度上是错误的.谁能看到我做错了什么?谢谢.
$type = array("s", "s");
$param = array("string1","anotherstring");
$stmt = $SQLConnection->prepare("INSERT INTO mytable (comp, addl) VALUES (?,?)");
$params = array_merge($type, $param);
call_user_func_array(array(&$stmt, 'bind_param'), $params);
$SQLConnection->execute();
Run Code Online (Sandbox Code Playgroud) 我正在使用app.config文件来存储我的应用程序的动态参数.问题是,当我更改app.config文件中的值并启动应用程序时,它不会从配置文件加载新值.似乎app.config文件中的值只在编译时被读取并嵌入到exe文件中!
这是我读取配置文件的方式:
public class Helper
{
static Helper()
{
Foo = ConfigurationManager.AppSettings["Foo"];
}
public static string Foo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
我正在调整我的宠物项目以改善其性能.我已经淘汰了剖析器来识别热点,但是我认为理解Pythons的性能特性会更好一些,这对今后非常有用.
我想知道一些事情:
一些现代编译器拥有非常聪明的优化器,通常可以使用简单的代码并使其运行速度比任何人类调整代码的尝试都要快.根据优化器的智能程度,我的代码可能要好得多"哑".
虽然Python是一种"解释"语言,但它确实可以编译成某种形式的字节码(.pyc).这样做有多聪明?
如何在Python中存储数字.它们是在内部存储为整数/浮点数还是作为字符串移动?
NumPy可以带来多少性能差异?该应用程序大量使用向量和相关数学.使用它来加速这些操作可以产生多大的差异.
如果您能想到任何值得了解的事情,请随时提及.
因为有一些人引入了"先看看你的算法"的建议(这是非常明智的建议,但对于我提出这个问题的目的并没有真正的帮助)我会在这里添加一些关于最新情况,为什么我要问这个问题.
有问题的宠物项目是用Python编写的光线追踪器.它还不是很远,目前只是针对场景中的两个对象(三角形和球形)进行测试.没有执行阴影,阴影或光照计算.算法基本上是:
for each x, y position in the image:
create a ray
hit test vs. sphere
hit test vs. triangle
colour the pixel based on the closest object, or black if no hit.
Run Code Online (Sandbox Code Playgroud)
光线跟踪中的算法改进通常通过尽早消除场景中的对象来工作.它们可以为复杂的场景提供相当大的提升,但是如果这个光线跟踪器无法在没有挣扎的情况下对仅仅两个物体进行测试,那么它根本无法处理.
虽然我意识到基于Python的光线跟踪器不能完全达到基于C的光线跟踪器的性能,因为像Arauna这样的实时光线跟踪器可以在我的计算机上管理15-20 FPS,渲染640x480的相当复杂的场景,我希望在Python中渲染一个非常基本的500x500图像可以在一秒钟内完成.
目前,我的代码需要38秒.在我看来,它真的不应该花那么长时间.
分析显示了在这些形状的实际命中测试例程中花费的大部分时间.这在光线追踪器中并不是特别令人惊讶,也是我所期待的.这些命中测试的呼叫计数分别为250,000(精确到500x500),这表明它们的调用次数与它们应该的频率相同.这是3%的漂亮教科书案例,其中建议进行优化.
当我努力改进代码时,我正计划进行完整的计时/测量.然而,如果没有一些关于Python成本的基本知识,那么我调试代码的尝试只会在黑暗中磕磕绊绊.我认为获得一点点知识来照亮我的方式对我很有帮助.
我是memcached和sharding的新手.
我去过两篇文章.我需要在我的应用程序中实现它们.
我经历的文章很好,但没有一个给我如何使用这些技术.
任何人都可以向我建议我可以实际配置它们并运行样本的链接.
我想首先实现memcached,然后分片,然后将它们两者结合在一起.
谢谢你的帮助.