草庐IT

C++11多线程—thread

全部标签

C++ 线程安全双向链表

我正在编写的应用程序需要上述数据结构。我想知道是否有一个库已经实现了它,或者我是否必须自己编写它?如果没有必要,我真的不想重新发明轮子。我需要这个结构能够使用多个线程添加和删除项目,而不必在这样做时锁定整个结构。 最佳答案 可能有,但我认为这是Java早期的教训之一-数据同步通常不在容器的成员函数级别,而是在上面的一个步骤。您应该在访问非线程安全列表之前使用同步对象。考虑:ThreadSafeQueuetsq;tsq.push_back(...);//addlotsofdata...//Findthefirstelementthat

c - c中的全局结构和多线程

谁能解释一下这段代码中的编译错误:#include"common.h"typedefstructnodeData{intprocid;unsignedshortlocalport;DWORDLIFETIME;DWORDHELLOTIMEOUT;DWORDMAXTIME;}nodeData;intlistenerThread(){if(!bindSocket(listenSocket,nodeData.localport)){closesocket(listenSocket);WSACleanup();exit(-1);}//morecodegoeshere}intmain(intarg

html - 一个网页,可以让用户从中下载某个文件,但不会透露该文件的位置——这有可能吗?

(如果我的问题不在正确的地方,我很抱歉。(我思考了一段时间,得出的结论是这个是我问题的最佳位置)是否可以创建这样一个HTML网页,让用户可以从中下载某个文件,但不会泄露该文件的位置(即用户不知道他要下载的文件的URL)正在下载)。如果是,请给我一些指导,说明我应该使用哪些HTML代码来创建这样的页面。 最佳答案 HTML页面将提供指向服务器端脚本的链接,该脚本传递文件名或其他唯一的名字:DownloadNow脚本会读取标识符,从中导出完整路径,加载文件并使用适当的header/mime类型将其写回,从而使浏览器通过正常的下载对话框提

windows - "Windows cannot verify the digital signature"对于我签名的驱动程序——怎么办?

我有一个内核模式驱动程序,我必须将它安装在64位Windows7上。它需要进行数字签名。我使用dseo13b.exe对其进行了数字签名。但是当我加载驱动程序时,系统事件日志中出现错误Thedriverfailedtostartduetothefollowingerror:Windowscannotverifythedigitalsignatureforthisfile.Arecenthardwareorsoftwarechangemighthaveinstalledafilethatissignedincorrectlyordamaged,orthatmightbemaliciouss

c++ - 如何在不同的线程上调用 glReadPixels?

当我在另一个线程上调用glReadPixels时,它没有返回任何数据。我在某处读到建议我需要在调用线程中创建一个新的上下文并将内存复制过来。我该怎么做?这是我使用的glReadPixels代码:pixels=newBYTE[3*width*height];glReadPixels(0,0,width,height,GL_RGB,GL_UNSIGNED_BYTE,pixels);image=FreeImage_ConvertFromRawBits(pixels,width,height,3*width,24,0xFF0000,0x00FF00,0x0000FF,false);FreeIm

c++ - 如何销毁由 std::thread 显式创建的线程?

我希望两个线程最初都在无限循环中运行,但过了一段时间我想杀死第一个线程而不等待它完成,第二个线程应该正常运行。我该如何实现?当我运行下面的代码时,出现调试错误!voidf1(inti){while(1){printf("ExecutngThread%d:%d\n",i,j);Sleep(10);}}intmain(){std::threadt1(f1,1);std::threadt2(f1,2);Sleep(100);t1.~thread();while(1){Sleep(10);}return0;} 最佳答案 程序按照设定的控制流

c++ - WINAPI - 我想在一个单独的线程中进行消息泵

在WindowsAPI中,制作一个窗口需要一个消息泵来保持窗口运行和更新。现在,写一个消息泵由一个while循环组成,它控制了整个程序,不允许执行其他事情,这是一个大问题。考虑我的代码,它是一个头文件,我称之为CFrame.h(因为在里面我创建了一个名为CFrame的类,它旨在模仿JFrame在Java中)。换句话说,我希望可以创建CFrame的多个实例,以便显示多个窗口,并且消息循环不会在创建第一个窗口后停止窗口。我为函数ThreadExecution()创建了一个新线程,由于某种原因程序刚刚终止,为什么?#defineUNICODE#includeconstwchar_tCLASS

c++ - 在 C 窗口中将参数传递给线程的最佳方法是什么?

嗨我有一个使用几个变量的线程。变量在运行时由argv[]确定。我的选择:使变量成为全局变量,以便线程可以使用它们(不需要保护它们,因为线程不会更改它们)。我不太愿意使用它,因为全局变量不是很好创建一个结构来保存变量并将其传递给线程。varibales并没有真正相关,因此它将是一个“强制”结构,除了线程的参数之外没有任何意义。而且,比选项1更复杂还有其他选择吗?哪个更好?谢谢! 最佳答案 itwouldbea"forced"structwithnomeaningotherthanargumentforthethread这听起来像是对结

c++ - 给定线程 ID,如何确定它是否仍在 Windows 上运行

在Linux上,我们有pthread_kill()来执行此操作。我正在尝试为它找到Windows对应项。换句话说,给定一个线程id,有没有办法判断线程是否还在运行?GetExitCodeThread()是我发现的最接近的方法,但是,它需要线程句柄而不是线程ID作为其参数。 最佳答案 您不应该为此目的使用线程ID:线程ID可以重复使用,因此如果您获得线程ID,则该线程退出,另一个线程可以使用相同的线程ID启动。句柄不存在这个问题:一旦一个线程终止,该线程的所有句柄都会反射(reflect)该线程的终止状态。您可以使用OpenThrea

c# - 如何终止在 C# 中的 foreach 循环中启动的线程

我在Windows服务中为每个循环启动了多个线程。我没有为这些线程提及任何名称。我如何终止这些线程。我使用以下代码创建线程。newThread(()=>{foreach(MyClassdetailinMyclassList){DoWork(detail);}}).Start();通过启动这些线程,我为每个细节创建了一个计划任务。我可以在计划完成后处理这个线程吗?如何处理? 最佳答案 强行终止线程绝不是个好主意。您真正应该做的是在循环内放置一些经过适当设计的“我应该继续”检查,您可以在外部将其设置为“否”。如何做到这一点更多地取决于上