小编Gra*_*amS的帖子

如何从LPCTSTR转换为std :: string?

我有一个LPCTSTR想要调用带std::string参数的函数.

我需要做什么转换?

c++ string visual-c++

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

查找表vs if-else

今天我使用查找表而不是if-else读取代码来剪切两个求和的uint8值.地图是i in i={0...255},255 in i={256...511}.我想知道这可能有多大,并尝试使用gprof找到它,

g++ -std=c++0x -pg perfLookup.cpp -O2 -o perfLookup && ./perfLookup && gprof perfLookup |less
Run Code Online (Sandbox Code Playgroud)

随附下面的代码.现在没有-O2标志,gprof表示lookup()占45%,而ifelse()占执行时间的48%.使用-O2但查找()为56%,ifelse()为43%.但这个基准是否真的正确?也许很多代码都被优化了,因为dst永远不会被读取?

#include <iostream>
#include <cstdint>
#include <vector>

void lookup(std::vector<uint8_t> src, int repeat) {
  uint8_t lookup[511];
  for (int i = 0; i < 256; i++) {
    lookup[i] = i;
  }
  for (int i = 256; i < 512; i++) {
    lookup[i] = 255;
  }

  std::vector<uint8_t> dst(src.size());
  for (int i = 0; i < repeat; i++) {
    for (int i = 0; …
Run Code Online (Sandbox Code Playgroud)

c++ optimization performance

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

添加#include <boost/thread/mutex.hpp>会破坏我的ActiveX控件吗?

在ActiveX控件中使用时,boost :: mutex标头是否存在已知问题?
(提升版本v1.39)

如果我在Visual Studio 2008中创建名为"DefaultOCXControl"MFC ActiveX控件项目,那么我可以构建它,控件将自身注册为构建的一部分,并且可以像您期望的那样插入到ActiveX测试容器中.都好.

如果我然后添加此行:

#include <boost/thread/mutex.hpp>
Run Code Online (Sandbox Code Playgroud)

在我的DefaultOCXControlCtrl.h文件顶部并重建:构建结束时的注册步骤失败:

调试断言失败!
程序:C:\ Windows\system32\regsvr32.exe
文件:f:\ dd\vctools\vc7libs\ship\atlmfc\src\mfc\dllinit.cpp
行:587

令人不快的断言看起来像这样:

void AFXAPI AfxCoreInitModule()
{
    ASSERT(AfxGetModuleState() != AfxGetAppModuleState());
    ...
Run Code Online (Sandbox Code Playgroud)

尝试将控件插入ActiveX测试容器现在会产生相同的消息.如果我删除该行并重建然后一切都很好 - 所以它肯定似乎是该头文件中导致问题的东西.

c++ mfc boost activex visual-c++

6
推荐指数
2
解决办法
3085
查看次数

如何在序列图上表示等待信号的线程?

常见的多线程实现是让某个类Method_A()在线程中运行并阻塞等待某些信号/事件成员变量(例如WaitForSingleObject)。

然后,在不同线程中运行的交互类将调用Method_B()它执行一些工作,设置信号/事件变量,也许执行更多工作,然后返回。

如何在序列图上表示这种交互?

我是否应该有两条生命线,每个线程一条,即使它们在类的同一个实例上运行?我的建模工具(Enterprise Architect 12)不允许同一类在序列图上出现两次,因此似乎不鼓励这样做。


编辑:Geert 指出序列图应该使用实例,而不是类,这是一个公平的评论。然而问题是相同的:多个生命线意味着多个实例,但在问题中,Method_A()和正在同一个Method_B()实例上操作,只是来自不同的线程。这可以怎样表示呢?

uml sequence-diagram enterprise-architect

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

共享内存中的条件变量 - 此代码是否符合POSIX标准?

POSIX标准是否允许命名共享内存块包含互斥锁和条件变量?

我们一直在尝试使用互斥和条件变量来同步对LynuxWorks LynxOS-SE系统(POSIX-conformant)上的两个进程对命名共享内存的访问.

调用一个共享内存块"/sync"并包含互斥锁和条件变量,另一个是"/data"并包含我们同步访问的实际数据.

pthread_cond_signal()如果两个进程都没有mmap()完全相同的顺序执行调用,或者如果一个进程在映射内存之前在某个其他共享内存中进行mmaps,我们就会看到失败"/sync".

这个示例代码与我可以做的一样短:

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <sys/file.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
#include <iostream>
#include <string>
using namespace std;

static const string shm_name_sync("/sync");
static const string shm_name_data("/data");

struct shared_memory_sync
{
    pthread_mutex_t mutex;
    pthread_cond_t condition;
};

struct shared_memory_data
{
    int a;
    int b;
};


//Create 2 shared memory objects
// - sync contains 2 shared synchronisation …
Run Code Online (Sandbox Code Playgroud)

unix posix ipc shared-memory lynxos

5
推荐指数
2
解决办法
9268
查看次数

发信号通知条件变量(pthreads)

假设某些条件变量"cond"与互斥变量"mutex"相关联.如果线程cond在调用后处于休眠状态pthread_cond_wait(&cond,&mutex),并且另一个已mutex锁定的线程已完成,则该线程在调用pthread_cond_signal(&cond)之前或之后调用pthread_mutex_unlock(&mutex)是否重要?它是否甚至需要解锁互斥锁pthread_cond_signal(&cond),因为睡眠线程无论如何都会获取互斥锁?

编辑:根据https://computing.llnl.gov/tutorials/pthreads/#ConVarOverview,"调用pthread_cond_signal()后未能解锁互斥锁可能不允许匹配的pthread_cond_wait()例程完成(它将保持阻塞状态). " 我想那时,解锁,也许只是之后才需要.

c posix mutex pthreads condition-variable

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

同时显示同一文档的多个视图

如何说服MFC Doc/View架构让我同时显示同一文档的两个不同视图?

例如,假设我的CDocument子类代表一些描述的存档.
我想要一个UI,其中该存档中所有条目的名称显示在CListView左侧窗格的子类中,而当前所选条目的详细信息显示在CEditView右侧窗格的子类中.

CSingleDocTemplate似乎只允许连接了一个文件,一个框架和一个视图.我仍然想要一个SDI应用程序,但我想要一个文档和两个不同的视图 - 这不是一个好的Doc/View架构的重点吗?

c++ model-view-controller mfc visual-studio

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

如何在我的网站中显示嵌入Google搜索结果?

我在我的网站上使用此代码来显示我的网站的Google搜索结果:

<!-- Search block -->       
<div class="searchBox">
    <form method="get" action="http://www.google.com/search"> 
        <input type="text" name="query" class="searchField" />
        <input type="hidden" name="sitesearch" value="my_website.com">
        <input type="submit" value="" class="searchSubmit">
    </form>
</div>  
Run Code Online (Sandbox Code Playgroud)

我喜欢这个简单的代码,我不喜欢使用谷歌自定义搜索,但是有没有办法在我指定的页面中显示嵌入此搜索的输出?

html search

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

为什么以下代码没有给出所需的答案?

昨天接受采访时,面试官问我一个问题:

为什么以下代码没有给出所需的答案?

int a = 100000, b = 100000;

long int c = a * b ;
Run Code Online (Sandbox Code Playgroud)

语言是C.

我已经告诉采访者我们首先计算100,000*100,000作为int(溢出),然后将其投入很长时间.

c c++ int

3
推荐指数
2
解决办法
359
查看次数

fprintf的成本

我正在用C++开发一个嵌入式应用程序,用于具有有限代码/数据RAM的平台,但是对于文件系统的使用而言是无限的RAM.

在寻找减少代码大小的同时,我意识到排除fprintf()行对生成代码的大小贡献很大.

我的问题是:1.为什么fprintf的成本如此之高?2.如果我排除了fprintf功能,那么生成描述通过应用程序运行的出现的日志文件的替代方法是什么?

c c++ embedded printf

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

如何在XML架构定义中表示IP地址?

我想在我的XML模式定义(XSD)中定义一个类型,它以点十进制表示法表示IPv4地址,因此在我的XML中:

<Example>
    <Address>192.168.0.1</Address>
</Example>
Run Code Online (Sandbox Code Playgroud)

将被验证为正确和不正确的值,例如:

<Example>
    <Address>192.268.0.1</Address>
</Example>
Run Code Online (Sandbox Code Playgroud)

被拒绝为无效.

xml xsd ip-address

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

如果malloc返回NULL怎么办?

在我的程序中,我处理大量数据。我使用 malloc() 函数为我的大数组分配内存。分配内存后,我检查指针是否为NULL(那是因为没有那么大的内存空间或者我不知道为什么)。

但有时我的指针是NULL。那么现在该怎么办呢?我做了一个循环,如果指针为空,它会尝试一次又一次地分配它。但它变成了无限循环,并且仍然说指针为 NULL。那么如果不想分配内存怎么分配呢?

谢谢你的回复。

c pointers memory-management

-2
推荐指数
1
解决办法
4402
查看次数