Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C/C+中生成线程的跨平台方式+;? 在C++和C++中,是否有跨平台的线程生成方法? 像sched_yield()或Sleep(0)之类的东西? SDLYLISH(0)在某些实现中是否总是产生或将立即返回?< P>,因为C和C++(到C++ 98)都没有“线程”,所以线程没有完全跨平台的方式。_C++_C_Multithreading_Cross Platform_Sdl - Fatal编程技术网

在C/C+中生成线程的跨平台方式+;? 在C++和C++中,是否有跨平台的线程生成方法? 像sched_yield()或Sleep(0)之类的东西? SDLYLISH(0)在某些实现中是否总是产生或将立即返回?< P>,因为C和C++(到C++ 98)都没有“线程”,所以线程没有完全跨平台的方式。

在C/C+中生成线程的跨平台方式+;? 在C++和C++中,是否有跨平台的线程生成方法? 像sched_yield()或Sleep(0)之类的东西? SDLYLISH(0)在某些实现中是否总是产生或将立即返回?< P>,因为C和C++(到C++ 98)都没有“线程”,所以线程没有完全跨平台的方式。,c++,c,multithreading,cross-platform,sdl,C++,C,Multithreading,Cross Platform,Sdl,在C++0x中,有一个函数std::this_thread::yield(),可以调用该函数来实现yield。这将是一个线程的可移植方式,一旦人们开始使用C++ 0x线程库。C++中的< P>,按你的要求去做。在具有posix线程的平台上,对C和与之链接的任何东西执行相同的功能。在不能立即停止线程并启动另一个线程的平台上,这是因为调度程序不支持该功能。我不认为有很多这样的平台实际上存在于野外。我意识到这并不是语言中固有的。我主要想知道是否有一个库可以这样做,因此关于SDL_延迟的评论。@Shum

在C++0x中,有一个函数
std::this_thread::yield()
,可以调用该函数来实现yield。这将是一个线程的可移植方式,一旦人们开始使用C++ 0x线程库。C++中的

< P>,按你的要求去做。在具有posix线程的平台上,对C和与之链接的任何东西执行相同的功能。在不能立即停止线程并启动另一个线程的平台上,这是因为调度程序不支持该功能。我不认为有很多这样的平台实际上存在于野外。

我意识到这并不是语言中固有的。我主要想知道是否有一个库可以这样做,因此关于SDL_延迟的评论。@Shum:无论您使用的是什么线程库,都可能有一个。你用的是什么线程库?@Shum:只要你说“库”,那么唯一的答案就是“可能,这取决于库支持什么平台以及库提供什么功能。”@Dean Harding:我用的是SDL线程库,但不幸的是它没有。我可以使用TooMcGeGead的答案来代替Boost线程。@ SUM:Booost。线程是C++的一个合理的可移植线程库的一个不错的选择。如果你想走在前沿,这是一个很好的C++0x线程库的商业实现(它也恰好是由编写Boost.Thread的Anthony Williams编写的);调度程序可以立即恢复产生的线程。@James:同意,措辞含糊不清,但从时间切片调度程序的角度考虑,这一行反映了任何新线程在有机会被调度之前仍将等待现有切片,在Windows(当然没有POSIX线程)上,我们本质上调用
Sleep
,时间限制为0,以使线程屈服。在POSIX线程中,预期屈服的线程会被推到线程队列的底部。这意味着,如果当前进程有任何可以调度的线程,那么它们的调度将有利于产生线程。请注意,从Windows Server 2003开始,睡眠(0)不再产生调用线程。yield()通常是一种糟糕的设计。如果你需要等待某件事情,那么通过事件、信号或某种条件来明确地等待它。注意,不可能编写一个总是会让步的“让步”版本。如果没有其他线索可以屈服呢?我要说的是,SDL的SDL_延迟(0)完全符合您的要求。