J'adorerais essayer la grande distribution centrale, mais tout ce que j'ai à développer est un poste de travail Ubuntu. Est libdispatch, et l'extension de blocs à c/obj-c etc ... disponible sur Linux? Si oui, comment puis-je les obtenir?Les blocs et libdispatch sont-ils disponibles sur Linux?
Répondre
Vous devrez peut-être utiliser le compilateur LLVM Clang (available on Ubuntu) pour obtenir des blocs en ce moment (je ne pense pas que ce soit disponible dans gcc, mais je n'ai pas suivi gcc, donc je peux me tromper).
Des efforts sont en cours pour porter le port libdispatch (home for the open source libdispatch) vers Linux. La plupart des efforts semblent être sur Debian jusqu'à présent, mais aussi sur d'autres distributions. Voir ces fils de discussion:
Je l'ai fait un peu de travail pour obtenir la version OS X Lion Montagne de libdispatch travaillant sur Linux; le résultat est à Github: http://nickhutchinson.me/libdispatch/.
Plutôt que d'utiliser des blocs, utilisez C++ lambdas. Ils jouent mieux avec C++ et il y a moins de magie cachée.
je le fais comme ceci:
/// Dispatch a function object to a queue.
template<class F>
static void dispatch_async_function(dispatch_queue_t queue, F f) {
struct context_t {
using function_type = F;
context_t(function_type&& f) noexcept
: _f(std::move(f))
{}
static void execute(void* p) noexcept {
auto context = reinterpret_cast<context_t*>(p);
if (context) {
try {
context->_f();
}
catch(...) {
// error processing here
}
delete context;
}
}
private:
function_type _f;
};
dispatch_async_f(queue, new context_t<F>(std::move(f)), &context_t<F>::execute);
}
Et si vous devez vous assurer que certaines ressources partagées existe avant que l'appel a lieu (comme un rappel sur un objet qui est maintenu en vie par un pointeur partagé) :
/// Dispatch a function object to a queue. Only execute the function if the tie
/// locks successfully.
template<class F>
static void dispatch_async_tied_function(dispatch_queue_t queue, std::weak_ptr<void> tie, F f) {
struct context_t {
using function_type = F;
context_t(function_type&& f) noexcept
: _f(std::move(f))
{}
static void execute(void* p) noexcept {
auto context = reinterpret_cast<context_t*>(p);
auto lock = _tie.lock();
if (context && tie) {
try {
context->_f();
}
catch(...) {
// error processing here
}
delete context;
}
}
private:
function_type _f;
std::weak_ptr<void> _tie;
};
dispatch_async_f(queue, new context_t<F>(std::move(f)), &context_t<F>::execute);
}
les appellent comme ça
dispatch_function(queue, []() { something(); });
ou ...
dispatch_tied_function(_myQueue, shared_from_this(), [this]() { somethingOnThis(); });
Utiliser clang-3.4.
- sudo apt-get install libdispatch-dev
- sudo apt-get install libblocks-exécution-dev
- Compile avec -fblocks
- Lien avec -lBlocksRuntime -ldispatch
- 1. Commandes Linux disponibles sur les versions Android
- 2. Problèmes de mémoire avec libdispatch
- 3. Php sur les fenêtres et les blocs
- 4. Rendre les choses disponibles uniquement à l'intérieur des blocs Ruby
- 5. Intégration d'une boucle d'exécution personnalisée avec libdispatch
- 6. Linux: liste tous les gestionnaires de fenêtres disponibles
- 7. killproc et pidofproc sur linux
- 8. Les blocs feof sur les sockets
- 9. Sur les blocs d'initialisation statiques et non statiques en Java
- 10. Question sur les blocs et grand central d'expédition
- 11. Quels sont les forums Linux/Linux embarqués actifs disponibles en ligne?
- 12. C# sur OS X et Linux?
- 13. Comment obtenir la liste de tous les ports série disponibles sur Linux en utilisant Java?
- 14. Essayer de comprendre les blocs sur iOS
- 15. PHP: Variable globale sur les blocs PHP
- 16. Quelles sont les polices disponibles sur Android?
- 17. Recherche de cartes son disponibles sous Linux par programme
- 18. blocs et fils
- 19. comment lire les informations GPS sur Linux et sur Windows
- 20. Les blocs Objective-C sont-ils supportés par les compilateurs sous Linux?
- 21. CoreFoundation Lite sur Linux et Android
- 22. multithreading et blocs statiques
- 23. unistd.h et C99 sur Linux
- 24. Filetage sur Windows et Linux
- 25. Vues, blocs et modèle?
- 26. LuaSockets et Code :: Blocs
- 27. Différence entre les fichiers de caractères et de blocs
- 28. Performances et blocs VBO
- 29. Lisser les blocs
- 30. Quelles bibliothèques de discours sont disponibles sous Linux?
Merci ! Beaucoup de recherches sur google n'ont abouti qu'à de la confusion pour moi. – mummey
De rien! Il peut être étonnamment difficile de trouver des choses comme celles-ci avec Google à certains moments, en particulier sur un sujet qui n'est pas familier. –
Tant que vous utilisez ok clang, je [utilise gcd assez heureusement] (http://chris.mowforth.com/installing-grand-central-dispatch-on-linux) sur ubuntu natty. –