小编Joh*_*mew的帖子

避免在.NET(C#)项目中重复的图标资源

我正在使用Visual C#2008 Express.我想为应用程序使用相同的图标(即.exe显示的图标),以及主窗体.不幸的是,VC#似乎并不是很聪明,并且坚持要复制图标数据.

似乎没有办法选择"已嵌入"的图标用于表单或项目图标(仅选择文件),并且对两个图标使用相同的文件只是将文件嵌入两次尽可能远看到.这不是什么大不了的事(现在硬盘空间很便宜,对吧?),但这让我很烦恼.

知道怎么避免这个吗?有没有办法以编程方式加载可执行文件的图标,以便在构建表单时使用,比如说?一些关于类似事情的论坛帖子似乎暗示.NET资源不使用普通的旧Windows资源系统 - 在获取旧式资源的框架内有没有办法?或者我是否必须绑定Win32 API函数才能执行此操作?

c# resources winapi winforms

20
推荐指数
3
解决办法
7313
查看次数

C++运算符查找规则/ Koenig查找

在编写测试套件时,我需要提供一个operator<<(std::ostream&...Boost单元测试的实现来使用.

这有效:

namespace theseus { namespace core {
    std::ostream& operator<<(std::ostream& ss, const PixelRGB& p) {
        return (ss << "PixelRGB(" << (int)p.r << "," << (int)p.g << "," << (int)p.b << ")");
    }
}}
Run Code Online (Sandbox Code Playgroud)

这没有:

std::ostream& operator<<(std::ostream& ss, const theseus::core::PixelRGB& p) {
    return (ss << "PixelRGB(" << (int)p.r << "," << (int)p.g << "," << (int)p.b << ")");
}
Run Code Online (Sandbox Code Playgroud)

显然,当g ++尝试解决运算符的使用时,第二个未包括在候选匹配中.为什么(什么规则导致这个)?

代码调用operator<<深入Boost单元测试框架,但这里是测试代码:

BOOST_AUTO_TEST_SUITE(core_image)

BOOST_AUTO_TEST_CASE(test_output) {
    using namespace theseus::core;
    BOOST_TEST_MESSAGE(PixelRGB(5,5,5)); // only compiles with operator<< definition inside theseus::core …
Run Code Online (Sandbox Code Playgroud)

c++ argument-dependent-lookup

14
推荐指数
1
解决办法
2675
查看次数

在线程终止之前调用CloseHandle()是否合理?

我想创建一个线程,然后立即调用CloseHandle并让线程自行死亡,这样我就不必在'原始'线程中做额外的清理工作(不是说清理本身很难) ,但这意味着我需要避免相当多的额外簿记.

MSDN说在一个线程上调用CloseHandle()不会终止该线程,但我不清楚这是否意味着我真的被允许这样做.

winapi multithreading

13
推荐指数
2
解决办法
4850
查看次数

RDTSC开销的差异

我正在构建一个微基准来测量性能变化,因为我在一些原始图像处理操作中尝试使用SIMD指令内在函数.但是,编写有用的微基准测试很困难,因此我想首先了解(如果可能的话)消除尽可能多的变异和误差源.

我必须考虑的一个因素是测量代码本身的开销.我正在使用RDTSC进行测量,我正在使用以下代码来查找测量开销:

extern inline unsigned long long __attribute__((always_inline)) rdtsc64() {
    unsigned int hi, lo;
        __asm__ __volatile__(
            "xorl %%eax, %%eax\n\t"
            "cpuid\n\t"
            "rdtsc"
        : "=a"(lo), "=d"(hi)
        : /* no inputs */
        : "rbx", "rcx");
    return ((unsigned long long)hi << 32ull) | (unsigned long long)lo;
}

unsigned int find_rdtsc_overhead() {
    const int trials = 1000000;

    std::vector<unsigned long long> times;
    times.resize(trials, 0.0);

    for (int i = 0; i < trials; ++i) {
        unsigned long long t_begin = rdtsc64();
        unsigned long long t_end = rdtsc64(); …
Run Code Online (Sandbox Code Playgroud)

c++ performance assembly intel rdtsc

13
推荐指数
1
解决办法
4342
查看次数

对超出范围的指针进行比较是否明确定义?

给出以下代码:

char buffer[1024];
char * const begin = buffer;
char * const end = buffer + 1024;
char *p = begin + 2000;
if (p < begin || p > end)
    std::cout << "pointer is out of range\n";
Run Code Online (Sandbox Code Playgroud)

比较执行(p < beginp > end)定义明确吗?或者此代码是否具有未定义的行为,因为指针已经超过了数组的末尾?

如果比较定义明确,那么定义是什么?

(额外信用:评估begin + 2000自身未定义的行为?)

c++ language-lawyer

13
推荐指数
2
解决办法
290
查看次数

未使用的let绑定在Haskell中是否有任何影响?

我刚才意识到写这个是合法的:

let _ = sum [1..100]
in  "Hello"
Run Code Online (Sandbox Code Playgroud)

let-binding似乎绝对没有任何作用.

但现在我想知道这里的确切语义.可以编写一个包含_绑定的程序,但删除该绑定会明显改变所述程序的含义吗?

基本上,我想知道自动删除这样的绑定是否安全.据我所知,这种绑定的价值不可能影响任何事情.然而,似乎假设它的类型可能会影响其他东西.任何人都可以构建一个例子吗?

syntax haskell

13
推荐指数
2
解决办法
521
查看次数

std :: set :: iterator和std :: set :: const_iterator之间是否存在操作差异?

对于大多数容器,该iterator类型提供对容器中的值的读写访问,并且该const_iterator类型提供只读访问.但是,因为std::set<T>迭代器类型不能提供读写访问,因为修改集合中的值(可能)会破坏容器不变量.因此,在std::set<T>,无论是iteratorconst_iterator提供只读访问.

这引出了我的问题:你可以用a做std::set<T>::iterator的事情和用你做的事情之间有什么区别std::set<T>::const_iterator吗?

请注意,在C++ 11中,容器的操作方法(例如erase)可以带const_iterator参数.

c++ containers iterator set c++11

10
推荐指数
1
解决办法
955
查看次数

在C++中按代理排序(或:用另一个容器排序一个容器)

我有一组被分为两个数组中的数据(我们称它们datakeys).也就是说,对于具有索引的任何给定项目i,我可以使用该项目data[i]的密钥和该项目的密钥来访问该项目的数据keys[i].我不能改变这种结构(例如,将键和数据交织成单个数组),因为我需要将data数组传递给需要某种数据布局的库函数.

如何根据keys数组的内容对两个数组(最好使用标准库函数)进行排序?

c++ sorting stl

9
推荐指数
1
解决办法
1240
查看次数

轻量级C++ SAX XML解析器

我知道至少有三个轻量级C++ XML解析器:RapidXML,TinyXMLPugiXML.但是,所有这三个都使用基于DOM的接口(即,它们构建自己的XML文档的内存中表示,然后提供遍历和操作它的接口).对于我必须处理的大多数情况,我更喜欢SAX接口(解析器只是吐出一些事件流,比如start-of-tag,应用程序代码负责根据这些事件做任何想做的事情) .

任何人都可以推荐一个带有SAX接口的轻量级C++ XML库吗?

编辑:我还应该注意Microsoft XmlLite库,它确实使用SAX接口(好吧,实际上是一个"拉"接口,可能更好).不幸的是,目前我已经排除了它,因为据我所知它只是闭源和Windows(如果我错了,请纠正我).

c++ xml sax

9
推荐指数
2
解决办法
2万
查看次数

如何在Linux中获得最准确的实时周期性中断?

我希望在10的幂的频率下被中断,因此启用/ dev/rtc的中断并不理想.我想在中断之间睡1毫秒或250微秒.

从/ dev/hpet启用定期中断非常有效,但它似乎在某些机器上不起作用.显然我不能在没有HPET的机器上使用它.但我无法让它在一些可以作为时钟源使用的机器上工作.例如,在Core 2 Quad上,当设置为poll时,内核文档中包含的示例程序在HPET_IE_ON处失败.

使用Linux提供的itimer接口而不是直接与硬件设备驱动程序连接会更好.在某些系统上,itimer提供的定期中断随着时间的推移更加稳定.也就是说,由于hpet不能以我想要的频率中断,因此中断开始从挂起时间开始漂移.但我发现有些系统的睡眠时间比使用itimer要长(10+毫秒).

这是一个使用itimer进行中断的测试程序.在某些系统上,它只打印出一个警告,它在目标时间内睡眠约100微秒左右.在其他情况下,它将打印出批次警告,它在目标时间内睡了10+毫秒.用-lrt编译并运行sudo chrt -f 50 [name]

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <error.h>
#include <errno.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
#include <signal.h>
#include <fcntl.h>
#define NS_PER_SECOND 1000000000LL
#define TIMESPEC_TO_NS( aTime ) ( ( NS_PER_SECOND * ( ( long long int ) aTime.tv_sec ) ) \
    + aTime.tv_nsec )

int main()
{
    // Block alarm signal, will be waited on explicitly
    sigset_t lAlarm;
    sigemptyset( &lAlarm );
    sigaddset( &lAlarm, SIGALRM  );
    sigprocmask( …
Run Code Online (Sandbox Code Playgroud)

linux real-time timer

7
推荐指数
2
解决办法
1万
查看次数

iter_swap可以专门吗?

如果我有一个容器std::vector<T*> items,我可以创建一个IndirectIterator包装std::vector<T*>::iterator并允许迭代T而不是T*s.

我可以专门iter_swap用于通过指针IndirectIterator制作标准算法(例如std::sort)交换项吗?

即,如果我写下以下内容,它会对标准算法产生任何影响吗?

namespace some_namespace
{
    template <typename IterT>
    class IndirectIterator
    {
            IterT m_base;
        public:
            typedef IterT base_iterator;
            typedef /* ... */ reference;

            /* ... */

            reference operator*() const { **m_base; }

            const base_iterator& base() const { return m_base; }
            base_iterator& base() { return m_base; }
    };

    template <typename T>
    void iter_swap(IndirectIterator<T>& a, IndirectIterator<T>& b)
    {
        using std::iter_swap;
        iter_swap(a.base(), b.base());
    }
}
Run Code Online (Sandbox Code Playgroud)

这种专业化的好处是它交换指针而不是完整的T实例,所以它更快(可能).

c++ algorithm containers vector c++11

7
推荐指数
1
解决办法
326
查看次数

std :: ostream第一次使用时没有正确格式化const char*

我一直在编写一个自定义std::streambuf作为日志系统的一部分.但是,我遇到的问题是流的第一段输出没有正确格式化.

这是一个简化的测试用例,不使用任何自定义streambufostream类:

#include <iostream>

int main()
{
    std::streambuf *coutbuf = std::cout.rdbuf();
    std::ostream(coutbuf) << "test" << ": writing to cout using a separate ostream." << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用g ++编译它:

$ g++ --version
g++ (Ubuntu 4.4.1-4ubuntu8) 4.4.1

$ g++ -o fail reduced-case.cpp

$ ./fail
0x400c80: writing to cout using a separate ostream.
Run Code Online (Sandbox Code Playgroud)

请注意,第一个字符串文字("test")被格式化为通用指针(字符串的地址以十六进制输出),而第二个字符串文字格式正确.

我唯一能想到的是直接使用新构造的std::ostream(即,不将其放入变量)是无效的.如果是这种情况,我非常想知道究竟是什么使它无效(我认为它与iostreams无关,而是与评估顺序或与构造函数或其他东西的交互).如果这不是问题,那么是什么?

c++ iostream

5
推荐指数
1
解决办法
983
查看次数

将两个shell命令合并到shell中的一个输出中

我试图将多个命令组合成一个输出.

#!/bin/bash

x=$(date +%Y)
x=$($x date +m%)

echo "$x"
Run Code Online (Sandbox Code Playgroud)

这回来了

./test.sh:line 4:2011:命令未找到

bash shell

4
推荐指数
2
解决办法
4283
查看次数