如果我不关心线程的返回状态,是否需要pthread_exit?我想知道是否可能存在与在我的数据化pthread中不调用pthread_exit相关的一些微妙的资源问题。谢谢。 最佳答案 pthread_exit()的目的是在任何其他线程加入时返回退出代码。来自manual:Performingareturnfromthestartfunctionofanythreadotherthanthemainthreadresultsinanimplicitcalltopthread_exit(),usingthefunction'sretu
我想用C++构建一个可移植且高效的服务器;它会有很多客户端同时尝试连接,因此它必须能够并行处理每个请求。我一直在努力寻找有关多线程的文档、指南...等。我发现了很多关于POSIXPthread的信息,但几乎没有找到关于GNUPth的信息(除了gnu.org中的官方手册)。那么,谁能解释一下POSIXPthread和GNUPth之间的区别?拜托,我不希望回复是维基百科内容的拷贝(请记住,我绝对是多线程的新手)。我希望我的服务器在所有基于*nix的系统之间具有可移植性和高效性,避免使用繁重的fork()。感谢您的帮助。PS:我认为最好在这里问这个问题:Windows怎么样?那里有Pthre
我使用的是Ubuntu10.10,Code::Blocks和GCC4.2。我写过这样的代码:#include#include#includeusingnamespacestd;void*thread1proc(void*param){while(true)coutMain开始,创建线程。但是(对我来说)奇怪的是main没有继续运行。我希望在屏幕上和程序结束时看到“你好”消息。因为在Windows中,在Delphi中它对我很有效。如果“main”也是一个线程,为什么它不继续运行呢?是关于POSIX线程的吗?谢谢。 最佳答案 pthre
条件变量通常用于在互斥量下修改它们所指的状态。然而,当状态只是一个单一的只设置标志时,就不需要互斥锁来阻止同时执行。所以有人可能想做这样的事情:flag=1;pthread_cond_broadcast(&cvar);然而,这只有在pthread_cond_broadcast暗示写内存屏障时才是安全的;否则,等待线程可能会在标志写入之前看到条件变量广播。也就是说,等待线程可能会唤醒,消耗cvar信号,但看到标志仍然是0。所以,我的问题是:pthread_cond_broadcast和pthread_cond_signal调用是否意味着写入内存屏障?如果是这样,这在相关的POSIX(或其
我有一个Base类和一个Derived类。他们有一个虚函数——virtualvoidaction()我如何将它传递给*pthread_create()*函数?示例(有错误):classBase{protected:pthread_ttid;public:virtualvoid*action()=0;};classDerived:publicBase{void*action();Derived(){pthread_create(&tid,NULL,&action,NULL);}};也许它应该是静态的?我尝试了很多组合,但找不到解决方案.. 最佳答案
我正在使用Xcode和C++制作一个简单的游戏。问题出在以下代码:#includevoid*draw(void*pt){//...}void*input(void*pt){//....}voidGame::create_threads(void){pthread_tdraw_t,input_t;pthread_create(&draw_t,NULL,&Game::draw,NULL);//Errorpthread_create(&input_t,NULL,&Game::draw,NULL);//Error//...}但是Xcode给我错误:“没有匹配的函数调用‘pthread_crea
我有一个小代码void*PrintHello(void*threadid){cout我会在创建后的某个时间加入线程。如果main试图加入一个已经退出的线程,会发生什么? 最佳答案 Whatwillhappenifthemaintriestojoinathreadwhichalreadyexited?连接操作将立即完成并返回。 关于c++-如果线程在调用pthread_join之前退出怎么办,我们在StackOverflow上找到一个类似的问题: https:/
我是pthreads的初学者,请多多包涵。我试图将一个字符串传递给thread_routine1函数。它以一个空指针作为参数。然后我想打印出来。void*thread_routine1(void*arg1){cout在pthread_creat函数中,我试图传递字符串,但我得到了从字符串到void指针的无效转换类型。我知道我可能会在不止一个地方出错,所以我会很感激一些指示。 最佳答案 这真的与pthreads无关。你做这个投(void*)t1,这实际上是在类型系统上使用大锤。C++中的字符串不是指针,因此将其转换为-并将其视为-只会
编辑:我错误地假设线程实际上是在pthread_create上开始运行时才在pthread_join上运行。我正在学习使用Posix线程,我读过:pthread_join()-等待线程终止所以,在代码示例中,main的exit(0)直到两个启动的线程都结束才到达。但是在第一次调用pthread_join()之后,main继续执行,因为第二次调用pthread_join()实际运行了,并且打印了中间的消息。那怎么样?main是否在两个线程都未完成时继续执行?还是不是?我知道这不是一种可靠的测试方法,但是第二条测试消息总是在两个线程都完成后打印出来,无论循环有多长。(至少在我尝试时在我的机
我正在尝试使用“CameraManager”类创建一个新线程,但出现以下错误:cannotconvert'*void(CameraManager::*)(void*)tovoid*(*)(void*)inpthread_createfunction我在cameramanager.h文件中定义:public:void*dequeueLoop(void*ptr);在cameramanager.cpp中voidCameraManager::startDequeuing(){dequeuing=true;dequeueThreadId=pthread_create(&dequeueThread