jjzjj

multithreading

全部标签

c++ - 使用不同线程时 Win32 API 死锁

我在尝试从其他线程使用WIN32API时遇到死锁。我的应用程序需要额外的线程来提高帧速率。它实际上有帮助,但是,我在几乎所有系统功能中都遇到了死锁:::显示窗口::移动窗口::更新窗口例如,我知道ShowWindow()可以替换为ShowWindowAsync(),它确实解决了问题,但是,在MoveWindow()和UpdateWindow()中没有这样的替代方法。有人遇到过这些问题吗,解决方案是什么?谢谢! 最佳答案 术语“死锁”描述了一个非常具体的事情,两个线程等待访问被另一个锁定的资源。没有迹象表明这就是您的情况(或是否存在?

c - 更新队列并从队列中删除所需的内容

我在这里陷入了一个非常困惑的境地,因此,我将解释整个场景。我开发了一个UDP服务器/多客户端应用程序。服务器有一个主接收线程。每个想要与服务器通信的客户端首先向服务器发送一个带有一些ID的消息。服务器从客户端接收此消息。服务器有一个包含授权ID列表的文本文件。当从客户端收到消息时,服务器将从客户端收到的ID与其文本文件中可用的ID进行比较。如果客户端的ID与服务器文本文件中的任何ID相匹配,则该客户端被视为已通过身份验证,并为该客户端创建一个新线程和一个新套接字。这个新客户的信息也在包含所有事件客户信息的队列中更新。所有这些任务现在已经完成现在的问题是,由于每个客户端都有一个专门的线程

c++ - 无法重定向程序的控制台输出

我有一个程序,我想将它的输出重定向到另一个文件。我尝试使用标准foo.exe>out.txt这不起作用,文件是空的,但是当我简单地从cmd运行它时,我可以正常看到所有消息。我确实注意到,如果我没有正确启动程序,并收到它的使用消息,它确实可以工作。我检查了源代码(C++),打印件(使用printf)似乎不是来自同一个线程。知道为什么会发生这种情况,我该如何解决? 最佳答案 我设法通过添加来解决这个问题setbuf(stdout,NULL);到主程序。我猜标准输出缓冲区没有刷新。 关于c++

c++ - Windows 上是否有 NSOperationQueue 的等价物?

在OSX或iOS上,NSOperationQueue对于分派(dispatch)异步任务非常有用。Windows上是否有类似的功能? 最佳答案 Windows有几个ThreadPoolAPIs.“旧线程池API”更像是NSOperationQueue,但是NewThreadPoolAPI推荐用于新代码。 关于c++-Windows上是否有NSOperationQueue的等价物?,我们在StackOverflow上找到一个类似的问题: https://stac

多次调用同一个 threadproc(),第一次调用没有完成

我有一个threadProcvoid*ThreadProc(void*xyz){//dosomework..}现在从主线程..我调用这个线程并且不想等待它完成WaitForSingleObject(hThread,0)现在我的程序流程是这样的,情况可能会到达哪里第一次调用线程未完成,第二次调用相同的ThreadProc()。所以...1.操作系统如何处理这种情况?这样的方案会不会有意想不到的效果呢?2.如果这是错误的做法,那么正确的做法是什么?因为最终我希望一个函数被异步调用,可能同时运行多个实例。 最佳答案 每个线程都有独立的栈,

c++ - 如何使用 OpenGL 在 Windows 上的同一个应用程序中绘制两个单独的 3D 窗口?

我正在Windows上使用C++的第3方程序中实现插件。第3方程序有一个使用OpenGL显示3D图形的窗口。但是我需要插件来创建另一个窗口,该窗口也使用OpenGL显示3D图形。我是否需要为我的窗口创建一个新的OpenGL渲染上下文,或者有什么方法可以“重用”第3方程序使用的OpenGL渲染上下文?我假设我必须创建一个新的OpenGL渲染上下文并尝试了以下操作://createarenderingcontexthglrc=wglCreateContext(hdc);//makeitthecallingthread'scurrentrenderingcontextwglMakeCurre

C++释放指向作为线程lpParam传递的结构的指针内部的指针

我在我的VC++程序中有一个要点,我必须创建一个新线程并将一个int和一个字符串作为lpParam传递。所以到目前为止我所做的是这个(删除指针/错误检查):typedefstruct_chThParam{intc;char*s;}chThParam;DWORDWINAPIstartSession(LPVOIDlpParam){chThParam*param=(chThParam*)lpParam;//dosomethingwithparamfree(param->ip);free(param);return0;}voidhandleResp(intc,char*s){chThParam

windows - 线程高 CPU 使用率但处于 "Ready"状态

我在Windows中使用ProcessExplorer来检查进程。当我查看此进程属性中的线程选项卡时,我看到1个线程的CPU使用率很高(双核服务器的总CPU约为30-49%,因此如果您等同于它,它会占用大量CPU时间单个线程到单个CPU时间间隔的值(value))。现在,如果我坐下来观察这个线程,它98%的时间都处于“就绪”状态,而其他时间则处于“正在运行”状态。为了用间隔更好地说明这一点:t=0,CPU=35,State=Readyt=1,CPU=49,State=Readyt=2,CPU=50,State=Readyt=3,CPU=39,State=Readyt=4,CPU=32,

windows - 通过启动命令返回变量

我正在寻找一种从启动命令启动的批处理脚本中获取值返回值的方法。让我解释一下:我需要通过从主批处理脚本同时启动多个子批处理脚本来利用多处理,然后在完成后检索每个子批处理文件的返回值。我一直在调用命令中使用返回变量,dbenham对此进行了很好的解释.该解决方案不允许多线程,因为子批处理脚本一个接一个地运行。使用启动命令允许运行多个批处理脚本,但值不会返回到我的主脚本,因为显然启动命令创建了一个全新的变量上下文。是否有人有从子脚本返回值到主脚本的解决方案/解决方法?下面是我需要的模型:ma​​inScript.bat@echooffsetlocalset"retval1=0"set"ret

c# - 在c#中获取进程的打开线程数

我想获取我从我的应用程序运行的进程打开的线程数,以运行我使用此代码的应用程序p.StartInfo=newProcessStartInfo(Application.StartupPath+@"\bin\childApp.exe",parametr);p.StartInfo.CreateNoWindow=true;p.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;p.StartInfo.UseShellExecute=false;p.StartInfo.RedirectStandardOutput=true;p.Start();我想知道我