草庐IT

线程队列

全部标签

c++ - 创建线程不接受成员函数

我正在尝试为网络编程创建一个类。这将创建一个带线程的通用套接字。但是当我尝试使用createthread()创建线程时。第三个参数是产生错误。从网上我了解到我不能使用成员函数作为createthread()的参数。有什么可以实现的吗? 最佳答案 处理这个问题的最简单方法是创建一个“stub”函数,它会回调到您的类中。UINTtidHANDLEhThread=CreateThread(NULL,0,myThreadStub,this,0,&tid);....unsignedlongWINAPImyThreadStub(void*ptr

c# - 创建一个队列来处理由 FileSystemWatcher 触发的作业

我构建了一个小型托盘应用程序,它将监视一个文件夹,并在添加新文件时运行一个作业。工作是观看视频文件并使用handBrakeCli将它们转换为.mp4。我已经解决了所有这些逻辑。我遇到的问题是,如果有多个文件,我希望它对作业进行排队,直到前一个文件完成。我是c#的新手,我不确定处理这个问题的最佳方法。一个想法是以某种方式创建一个队列,一个文件来按顺序存储命令,然后在过程完成后执行下一个命令。我们在这里处理大型电影文件,因此可能需要一段时间。我在具有8gbRAM的四核上执行此操作,似乎通常需要大约30分钟才能完成一部完整的电影。我只是不知道该怎么做。这是我目前的代码。这里有一些用于futu

windows - 最大线程数

这个问题在这里已经有了答案:What'sthemaximumnumberofthreadsinWindowsServer2003?(8个答案)关闭9年前。Delphi开发的32位和64位应用程序的最大线程数是多少?我需要知道在32位应用程序上同时运行的线程的限制是多少,因为我正在进行性能分析并且我想让操作系统管理正在等待的线程的执行顺序。

c++ - 在不减慢线程速度的情况下保存大量数据

我需要保存视频系统的踪迹,以便以后在Windows机器上检查重播。帧生成是在线程中完成的,我想在处理函数结束时保存帧,例如voidgenerate_video_frame(){....save_frame(frame);}为避免减慢生成线程的速度,save_frame必须尽快完成此操作。最终目标是在磁盘上保存视频的踪迹。每个帧都可能很大(甚至20-30MB),所以我不能将所有内容都存储在RAM中,因为我最终会完全填满它。我想到了两个解决方案:填充帧队列并使用另一个线程将其清空并将其刷新到磁盘(因此主线程不会受到影响)。如果刷新到磁盘线程较慢(如我所料),这最终也可能会填满RAM使用ma

c++ - 我如何在基于消息队列的Windows应用程序上使用谷歌测试?

我想对我的程序使用谷歌测试,它里面有定时器功能。定时器由windows的SetTimer()实现,在main()中有一个消息队列来处理超时消息。while(GetMessage(&msg,NULL,0,0)){if(msg.message==WM_TIMER){...}DispatchMessage(&msg);}对于google测试,它调用RUN_ALL_TESTS()开始测试。intmain(intargc,char*argv[]){testing::InitGoogleTest(&argc,argv);returnRUN_ALL_TESTS();}我的问题是如何整合这两个部分。因

c++ - 如何在动态加载的 DLL 中正确实现 (C++) 线程本地存储?

在这种情况下,我动态加载的DLL由Windows资源管理器加载,以便将新的属性表(新选项卡)添加到文件/文件夹属性页面。一个简单的例子是StrmExt.dll(downloadsource)。在此示例中(源由Microsoft提供),DLL不使用线程本地存储(TLS),因此在同时加载多个属性页时会导致严重问题。查看源代码后,DLL需要一个线程基变量(文件的文件路径)...staticTCHARg_szFile[MAX_PATH];将这一行代码更改为:_declspec(thread)TCHARg_szFile[MAX_PATH];...使DLL支持多线程,因此支持属性表的多个实例。但是

c++ - 我可以从不同的线程调用 socket send() 吗?

如果我有一个名为s的socket,我可以在不同的线程中执行此操作吗:线程1:send(s,"HellofromThread1");线程2:send(s,"HellofromThread2");是否保证这两个字符串会一个接一个地放入发送缓冲区(我不关心哪个先放),或者它们是否有可能混在一起?注意:也许这个问题的标题应该是:“Issocketsend()threadsafe”(但我不太确定线程安全是什么意思). 最佳答案 答案是否定的。一般来说,send()不保证数据是整block发送的。您始终需要检查send()返回的值,以了解实际发

我可以在特定地址创建一个堆栈的线程吗?

我正在做一些实验,想知道是否可以在我提供的特定地址创建一个线程堆栈,或者至少让线程堆栈只在我可以指定的某个(巨大的)虚拟内存区域中产生.我对此感兴趣的原因是我想在某个时候将整个堆栈复制到远程进程并且需要指针保持完整,并且线程堆栈不会发生冲突。这可能不是最好/最安全的方法,我知道,但这只是一个小小的爱好项目。如果您知道如何在Linux上执行此操作,我也对此很感兴趣。 最佳答案 只是编译评论所说的内容。Forwindows,theanswerisno对于Unix(posix),答案是pthread_attr_setstack.(另见上面

windows - 用于 I/O 的最新 Windows 线程池 API 用法

我不明白最新的Windows线程池API的一部分。我需要这方面的帮助。从文档中,将其用于I/O(在我的情况下,用于SOCKET)的方法可以总结如下:调用CreateThreadpoolIo。调用StartThreadpoolIo.您可以在那里找到此警告:YoumustcallthisfunctionbeforeinitiatingeachasynchronousI/OoperationonthefilehandleboundtotheI/Ocompletionobject.FailuretodosowillcausethethreadpooltoignoreanI/Ooperation

windows - 关闭事件对象是否会导致等待该对象的线程唤醒?

假设我有一个Windows事件对象,例如从调用CreateEvent。线程A在WaitForSingleObject(event_handle)中被阻塞。线程B调用CloseHandle(event_handle)。问题一:线程A发生了什么?问题2:如果线程A在WaitForMultipleObjects中被阻塞,会有什么不同吗?WaitForMultipleObjects返回什么? 最佳答案 根据实验,如果句柄关闭,WaitForSingleObject似乎不会唤醒,即线程A一直在等待。我没有检查过,但我假设WaitForMult