草庐IT

主线程

全部标签

C++11 线程,在主线程上运行

我正在尝试C++11线程进行一些开发。我想在异步线程中运行一些代码,当该代码完成后,我想在主线程上运行其他代码但只有当它完成时!这是因为我想要异步运行的事情是加载OpenGL的东西,并且在执行线程时它对OpenGL上下文有点棘手,据我所知这几乎是一个不在不同的环境中运行相同的上下文线程。但是我想创建一个加载器线程,它加载collada文件,这里耗时的东西实际上是解析文件和设置数据以及我可以(技术上)在一个单独的线程中做的所有事情,然后只需在主线程上执行特定于opengl的任务。(这是我最初的想法,我可能只是走错了路)。所以我在想,如果我可以分离一个异步线程来加载collada文件并填充

c++ - 为什么我需要从主线程使用 `pthread_exit()`,而它不是由 `pthread_create` 创建的?

我对一些正在测试以开始理解posix线程的代码有疑问。我有这个基本代码:#include#include#include#includeusingnamespacestd;void*printInfo(void*thid){longtid;tid=(long)thid;printf("Hellofromthread%ld.\n",tid);pthread_exit(NULL);}intmain(intargc,charconst*argv[]){intnum=8;pthread_tthreadlist[num];intrc;longt;for(t=0;t非常简单的代码,启动线程并从中打

c++ - (C++) 如何挂起主线程,然后在另一个线程中恢复?

我不是第一次在Window上工作。我尝试了此处描述的技术:无济于事。基本上,我正在构建一个网络爬虫,它需要在主线程输出结果之前暂停它。当我的最后一个pthread死亡时,主线程需要恢复。我知道最后一个pthread死掉的时间点,我只是不知道如何挂起或恢复主线程。非常感谢任何帮助!编辑:因此,在我想挂起/恢复main时,可能只有一个工作线程存在。我在构造函数中执行此操作,并在我收集更多链接时生成线程。 最佳答案 在主线程中,调用pthread_join()在每个工作线程上。 关于c++-(

c++ - MFC数据通过PostMessage转发到主线程

我有一个需要重构的C++/MFC应用程序。该应用过去常常在主线程上处理大部分数据,因此会阻塞输入,现在我想对其进行更改,以便所有GUI更新都通过PostMessage完成。不幸的是,我似乎无法找到有关如何实现此目标的良好资源。现在我正在考虑创建一个优先级队列,受关键部分保护,一个处理该队列的工作线程(while(true)),以及将指向数据的指针发送到主线程的PostMessage机制。这种方法让我感到害怕的是,PostMessage根本不能保证到达主线程,所以,如果我理解正确的话,有可能会发生内存泄漏。第二个问题是另一个应用程序可以向我的应用程序发送自定义消息,我的应用程序可能会尝试

c++ - 主线程中 block 作用域静态与命名空间作用域 thread_local 的初始化和销毁​​顺序

我正在尝试了解在主线程的上下文中使用静态存储持续时间和线程本地存储持续时间来初始化和销毁​​命名空间范围和block范围对象的顺序规则。考虑这两个类:structFoo{Foo(){std::cout除了它们的静态实例成员函数的实现之外,它们是相同的:thread_localFoot_foo;Foo&Foo::instance(){returnt_foo;}Bar&Bar::instance(){staticBars_bar;returns_bar;}Bar是一个Meyers单例,一个具有静态存储持续时间的block范围对象。Foo的实例是具有线程本地存储持续时间的namespace范

c++ - 让主线程等到所有其他 Qthread 完成

有没有办法强制主线程等待,直到从它创建的所有线程都将完成它们的工作,然后才能完成程序。我的意思是:intmain(){QthreadClassa;//incons'athreadiscreatedandrunningQthreadClassb;//sameasbefore***wishtowaittillbothcreatedthreadfinishedtheirjobs***return0; 最佳答案 那么,关于:a.wait();b.wait();或者,您宁愿启动一个事件循环(通常用于Qt应用程序),当您的两个线程都结束时(QT

c++ - 在变量被另一个线程写入后以及在该线程加入后从主线程访问变量是否安全?

这是线程安全的吗?intx=0;std::thread([&]{x=1;}).join();std::cout变量x可从两个线程访问,无需使用原子或锁。但是,对join()的调用强制对x的访问是顺序的。这里需要内存屏障吗? 最佳答案 是的,那个特定的代码片段是线程安全的;不需要障碍物或锁。这是关于您的代码的事件时间表:thread1--------|intx=0;(write0tox)|std::threadthread2(startthread2)-------->--------||join();x=1;(thread1susp

c++ - 保护主线程免受工作线程中的错误

当使用posix线程时,是否有一些方法可以“保护”主线程免受工作线程引起的错误(例如取消引用的空指针、被零除等)的影响。“工作线程”是指由pthread_create()创建的posix线程。不幸的是,我们不能使用异常——所以没有“catch”等。这是我的测试程序(C++):void*workerThreadFunc(void*threadId){int*a=NULL;*a=5;//Error(segmentationfault)pthread_exit(NULL);}intmain(){cout在上面的例子中,workerThread引起的错误会终止整个程序。但是尽管有这个错误,我还

c# - Xamarin.iOS 主线程和后台线程运行不正常

我会尽量保持简短和甜蜜。我有这段代码是按下按钮的结果(所以它在主UI线程上)MessageCenter.Init();上面的方法做了这个(以及其他事情)NS=NSTimer.CreateRepeatingScheduledTimer(TimeSpan.Parse("00:00:30"),delegate{NSObject.InvokeInBackground(()=>{HandleElapsed();});});HandleElapsed();使用Monitor.Enter(obj)方法获取对象的独占锁。这意味着主ui线程也可能需要获得独占锁。(加锁是为了保证sqlite数据的完整性)

ios - 用户界面按钮 |即使在主线程中,setTitle 也会花费大量时间

我重新打开这个问题,因为我的最后一个被标记为重复,即使它实际上不是!这是同样的问题,但解决方案不适用于我的代码。我正在使用swift2。所以我的问题是,正如标题所说:我在tableViewCell中有一个UIButton,当我使用方法«setTitle»时,更新标题需要10到60秒。同时,我正在使用«addTarget»,它立即生效。所以标题也应该更新。我的按钮在Storyboard中设置为“自定义”。加载View时,我正在运行以下代码:/*viewDidLoad*/overridefuncviewDidLoad(){super.viewDidLoad()boolAlready=fal