小编MCA*_*MCA的帖子

在Visual Studio中单击一下即可运行多个实例

我想知道我是否可以通过简单的点击或为其设置密钥来在调试模式下运行我的应用程序的多个实例(现在是两个实例)...

debugging visual-studio-2010 visual-studio

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

如何中断正在等待recv函数的线程?

我有一个套接字监听器挂在recv函数上:

size_t recvLen = recv(sock, buf, 512, 0);
Run Code Online (Sandbox Code Playgroud)

我想通过打断它来终止这个线程.MSDN说:

当发出阻塞的Winsock调用(例如recv)时,Winsock可能需要等待网络事件才能完成调用.在这种情况下,Winsock会执行可警告的等待,这可以通过在同一线程上安排的异步过程调用(APC)来中断.

我怎样才能做到这一点?

c++ sockets

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

C++向量如何改变内部指针

我想序列化向量。我不知道如何更改向量的指针。为了简单起见,假设我有一个向量,如下所示:

vector<char> v;
Run Code Online (Sandbox Code Playgroud)

我有这个指针:

char* c = { 'v', 'e', 'c', 't', 'o', 'r' };
Run Code Online (Sandbox Code Playgroud)

我希望我的向量 v 的内部指针指向我的 char* c:

&v[0] -> c 
Run Code Online (Sandbox Code Playgroud)

如何调整指向 c 的向量?有什么办法可以做到吗?


编辑2010年10月22日

所以伙计们,在调试矢量之后我想出了这个解决方案:

vector<char> dump;
memcpy(&myVector, &dump, sizeof(myVector)); // I change contents so it can work
myVector.assign(buf, buf+5); // copy contents into it from buffer (I don't like this part)
Run Code Online (Sandbox Code Playgroud)

为了做到这一点,我需要定义

_ITERATOR_DEBUG_LEVEL=0
Run Code Online (Sandbox Code Playgroud)

因为它最初设置为 2 并且它实际上进行了调试检查(我猜)这也不是在发布模式下定义的,对吗?所以这是我现在的解决方法,我想强制 ppl 长期删除向量......那么伙计们,你们对这个解决方案有什么想法?你看到危险了吗?


我实际上需要通过 memcpy 序列化向量。我想序列化我的整个类(例如拍摄内存快照)并将其写入文件,并在重新加载时从文件中读取它并恢复对象,就像不调用其构造函数并使用 new 运算符一样。

嗯,这个向量容器发生在堆栈内存上,所以 memcpy 无法到达它,因为它唯一关心的是堆......那么这段代码现在可能对我有用:

复制(buf,buf + 5 myVvector.begin());

嗯,这也不起作用,因为我不在我的类上使用 new 关键字,据我所知,这个向量没有初始化。因此,如果我尝试使用 smt 复制、push_back_fill 这个向量,则会出现以下错误: …

c++ pointers vector internal

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

C#等价于(将变量读作不同类型)

我一直在将我的应用程序的某些部分从C++转换为C#.有这个编码/解码部分,我需要读取一个变量作为浮点,定义为uint:

uint result = 0;

... // a value is set to result

return (*((float *)&result)); // get result as a float value
Run Code Online (Sandbox Code Playgroud)

无论如何将最后一行转换为C#?谢谢你们..

c# c++ variables pointers

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

BSF操作码不起作用

我正在使用Visual Studio 2010专业版,我刚刚在调试模式中检查过BSF无法正常工作我尝试了很多组合,但没有一个能够工作!

__asm
{   
    mov ebx, 0ffffffh;
    bsf ecx, ebx;
};
Run Code Online (Sandbox Code Playgroud)

上面的代码至少给了我一些结果,但我在ecx寄存器上得到0(我使用64位win7,应用程序是32位)

以下是英特尔关于BSF的说法:

在源操作数(第二个操作数)中搜索最低有效位设置位(1位).如果找到最低有效1位,则其位索引存储在目标操作数(第一个操作数)中.源操作数可以是寄存器或存储器位置; 目标操作数是一个寄存器.位索引是源操作数的位0的无符号偏移量.如果源操作数的内容为0,则目标操作数的内容未定义.

有人有什么想法吗?谢谢你们...

c++ x86 assembly visual-studio-2010

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