我是C#的新手,并尝试开发一个小型应用程序,在内部打开命令提示符并在此处执行一些命令.这是我到目前为止所做的:
m_command = new Process();
m_command.StartInfo.FileName = @"cmd.exe";
m_command.StartInfo.UseShellExecute = false;
m_command.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
m_command.StartInfo.CreateNoWindow = true;
m_command.StartInfo.RedirectStandardInput = true;
m_command.StartInfo.RedirectStandardOutput = true;
m_command.Start();
m_reader = m_command.StandardOutput;
m_writer = m_command.StandardInput;
m_writer.WriteLine("Somecommand"); //execute some command
Run Code Online (Sandbox Code Playgroud)
如您所见,我已重定向输入和输出.我的问题是如何同步执行"some命令",即我想使用重定向输出读取命令的结果.为此,我必须等到我使用WriteLine调用的命令才能完成.我怎么做?
我在64位Windows操作系统上看到,可用的用户虚拟地址空间是8个terra字节.但是,如果我们正在执行的程序在32位兼容模式下运行,那么这个用户空间仍然可用吗?或者它的行为类似于普通的32位操作系统,并且只提供2GB的用户地址空间?
在阅读InterlockedIncrement函数时,我看到了传递的变量必须在32位边界上对齐的注释.通常我见过使用InterlockedIncrement的代码,如下所示:
class A
{
public:
A();
void f();
private:
volatile long m_count;
};
A::A() : m_count(0)
{
}
void A::f()
{
::InterlockedIncrement(&m_count);
}
Run Code Online (Sandbox Code Playgroud)
以上代码在多处理器系统中是否正常工作,还是应该更加关注?
我的recv函数在从服务器获得响应时挂起.
c/c ++中的客户端代码:
void sockStuff() {
int sock, bytes_recieved,bytes_send;
char send_data[1024], recv_data[4096];
struct hostent *host;
struct sockaddr_in server_addr;
host = gethostbyname("127.0.0.1");
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("SocketError");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(50500);
server_addr.sin_addr = *((struct in_addr *) host->h_addr);
bzero(&(server_addr.sin_zero), 8);
if (connect(sock, (struct sockaddr *) &server_addr, sizeof(struct sockaddr))
== -1) {
perror("ConnectToError");
exit(1);
}
bytes_send = send(sock, a, strlen(a), 0);
bytes_send = shutdown(sock, 1);
bytes_recieved = recv(sock, recv_data, 4096, 0); //Where the program …Run Code Online (Sandbox Code Playgroud) 我无法决定在以下情况下使用哪个STL容器:
有没有现成的容器可用于此?我不想使用向量,然后std::find在push_back每次执行之前执行.
我有一组点在图像上.这些点形成不规则的闭合形状.我需要找到这个形状的区域.是否有任何身体是用于计算面积的常规算法?或者在诸如boost之类的库中是否有任何支持?我正在使用C++.
我有像这样的重载运算符new []
void * human::operator new[] (unsigned long int count){
cout << " calling new for array with size = " << count << endl ;
void * temp = malloc(count) ;
return temp ;
}
Run Code Online (Sandbox Code Playgroud)
现在打电话
human * h = new human[14] ;
Run Code Online (Sandbox Code Playgroud)
比方说sizeof(human) = 16,但计算它的打印是232,这是14*16 + sizeof(int*)= 224 + 8.
为什么要分配这个额外的空间?它在哪里记忆?因为当我打印*h或者h[0]我得到相同的结果时,所以它不在内存块的开头.它是否正确或我在这里遗漏了一些东西?
我听说通过单元测试我们可以捕获代码中的大部分错误,我真的相信这是真的.但我的问题是在大型项目中,每个类依赖于许多其他类,你如何进行单元测试?由于编写存根所需的复杂性和时间,所以对其他所有类进行存根没有多大意义.你对此有何看法?
如果您在Windows上使用C++开发内存密集型应用程序,您是否选择编写自己的自定义内存管理器以从虚拟地址空间分配内存,或者允许CRT控制并为您执行内存管理?我特别关注堆上小对象的分配和释放造成的碎片.因此,我认为只要有足够的内存但是碎片化,这个过程就会耗尽内存.
我使用malloc来分配内存和内存要求都大于1GB.程序崩溃......
我想问一下这个问题是否可以解决?如果是的话怎么样?
我的RAM大小为3GB,使用32位Windows操作系统并使用vc ++编程
c++ ×6
64-bit ×1
c ×1
c# ×1
heap ×1
interlocked ×1
math ×1
multicore ×1
new-operator ×1
optimization ×1
overloading ×1
shapes ×1
sockets ×1
stl ×1
unit-testing ×1
visual-c++ ×1
winapi ×1
windows ×1