我在C++中有这个程序,它有两个新进程:
#include <pthread.h>
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <cstdlib>
using namespace std;
int shared;
void func(){
extern int shared;
for (int i=0; i<10;i++)
shared++;
cout<<"Process "<<getpid()<<", shared "
<<shared<<", &shared "
<<&shared<<endl;
}
int main(){
extern int shared;
pid_t p1,p2;
int status;
shared=0;
if ((p1=fork())==0) {func();exit(0);};
if ((p2=fork())==0) {func();exit(0);};
for(int i=0;i<10;i++)
shared++;
waitpid(p1,&status,0);
waitpid(p2,&status,0);;
cout<<"shared variable is: "<<shared<<endl;
cout<<"Process "<<getpid()<<", shared "
<<shared<<", &shared "
<<&shared<<endl;
}
Run Code Online (Sandbox Code Playgroud)
两个分叉进程对共享变量进行增量,父进程执行相同操作.由于变量属于每个进程的数据段,因此最终值为10,因为增量是独立的.
但是,共享变量的内存地址是相同的,您可以尝试编译并观察程序的输出.怎么解释?我无法理解,我以为我知道fork()是如何工作的,但这看起来很奇怪..
我需要解释为什么地址是相同的,尽管它们是单独的变量.
我正在尝试开发客户端/服务器应用程序,其中客户端将图像发送到服务器.
服务器在路由器后面的一台计算机上运行,客户端在另一台不同路由器后面的计算机上运行.由于此通信将在WAN(公共IP)上进行,因此端口将在服务器端路由器上转发,以便服务器可以轻松地在该端口上接收传入的UDP数据报.
UDP的最大传输单元(MTU)大小为64KB.这意味着UDP套接字应该能够传输任何大小小于或等于65,536字节的东西.在我正在开发的应用程序的情况下,客户端只能发送10-13k的图像(UDP数据报).如果我尝试传输大小超过10Kb的图像,服务器将无法接收它,服务器端UDP套接字将始终处于(接收)阻止模式.
服务器在路由器后面的计算机上运行,客户端在同一路由器后面的计算机上运行.这意味着客户端和服务器位于同一局域网中.甚至客户端和服务器共享相同的局域网客户端正在服务器的公共IP上发送图像(UDP数据报).在这种情况下,服务器能够接收任何大小的UDP数据报,最高可达64K,这正是我期望从我的应用程序.
我试图在不同的远程PC上运行我的客户端,但结果是一样的.服务器无法接收大于10-13Kb的UDP数据报.如果有人能帮助我处理这种情况,他将不胜感激.
链接到代码:http: //pastebin.com/f644fee71
谢谢你,祝你好运.问候,
与Atif
现在我做:
Util.AssertBackgroundThread();
要么
Util.AssertUIThread();
在方法的开头.这不是太糟糕,但它是运行时错误检查.我们使用像C#这样的静态语言的原因是为了将更多的错误检查移到编译器的肩膀上.
现在我认为这通常不容易,但是如果我将自己限制为仅从我自己的实用程序方法启动线程(或使用ThreadPool.QueueUserWorkItem),那么在我看来,如果我标记这些方法,它应该是可能的进行静态分析以验证仅在UI线程上运行的方法确实只在UI线程上运行?
所以这里有两个问题.
我想在我的软件中使用类的前向声明,所以我可以使用typedef
并在类完全声明中使用它们.
像这样的Smth:
class myclass;
typedef boost::shared_ptr<myclass> pmyclass;
typedef std::list<pmyclass > myclasslist;
class myclass : public baseclass
{
private: // private member declarations
__fastcall myclass();
public: // public member declarations
__fastcall myclass(myclass *Parent)
: mEntry(new myclass2())
{
this->mParent = Parent;
}
const myclass *mParent;
myclasslist mChildren;
boost::scoped_ptr<myclass2> mEntry;
};
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:这种方法有什么缺点吗?我记得有关前向声明的析构函数问题的一些讨论,但我并没有把所有东西都拿出来.
还是有其他选择来实现这样的东西?
谢谢.
编辑:我找到了我所指的讨论:这里
当你将鼠标悬停在评论上时,如何在SO上实现这样的效果:
当我将鼠标悬停在DIV甚至表格单元格上时,如何制作如此显示的链接和图像?
是否可以在WPF的D3DImage中使用DirectX 10(我正在使用SlimDX)?我能找到的唯一示例和文档仅显示使用DX9曲面.
我有一个自定义UITableViewCell包含一个UISlider控件和一个UILabel,它显示滑块位置的当前文本值.我想在拖动滑块旋钮时更新标签.这是基本要素.
cellForRowAtIndexPath:此例程获取数据并更新滑块值以及与之关联的标签.
sliderValueChanged:此例程读取滑块值更新数据.然后调用[table reloadData],以便更新标签.
问题:以某种方式reloadData正在中断更新流程.如果我替换NSLog而不是reloadData,我会得到一个很好的更新流,显示滑块的值.为了防止循环,我将测试设置为不设置滑块值或调用reloadData,除非值不同.这没有解决问题.
任何帮助将不胜感激!
我正在windows,c ++,mfc下编程我怎样才能通过路径知道磁盘的格式,例如"c:\".Windows是否提供此类API?
我正在尝试在Windows服务中托管的WCF和我的服务GUI之间进行通信.问题是我正在尝试执行OperationContract方法
"'net.tcp:// localhost:7771/MyService'中的ChannelDispatcher与合同'"IContract"'无法打开其IChannelListener."
我的app.conf看起来像这样:
<configuration>
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="netTcpBinding">
<security>
<transport protectionLevel="EncryptAndSign" />
</security>
</binding>
</netTcpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:7772/MyService" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServiceBehavior"
name="MyService.Service">
<endpoint address="net.tcp://localhost:7771/MyService" binding="netTcpBinding"
bindingConfiguration="netTcpBinding" name="netTcp" contract="MyService.IContract" />
</service>
</services>
</system.serviceModel>
Run Code Online (Sandbox Code Playgroud)
端口7771正在侦听(使用netstat检查),svcutil能够为我生成配置.
任何建议,将不胜感激.
从异常堆栈跟踪
Run Code Online (Sandbox Code Playgroud)Server stack trace: at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter) at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan …
每次我发现从我的数据库中检索数据的性能都很慢.我试图找出我的SQL查询的哪个部分有问题,我尝试优化它,并向表中添加一些索引.但这并不能解决问题.
我的问题是:
还有其他技巧可以提高SQL服务器的性能吗?
导致SQL Server性能恶化的另一个原因是什么?
c# ×3
c++ ×3
attributes ×1
class ×1
css ×1
directx ×1
fork ×1
interprocess ×1
iphone ×1
linux-kernel ×1
mfc ×1
net.tcp ×1
performance ×1
slimdx ×1
sql-server ×1
typedef ×1
udp ×1
uislider ×1
uitableview ×1
unix ×1
wcf ×1
winapi ×1
wpf ×1