2013-01-03 4 views
2

Je voulais savoir s'il y avait un moyen d'utiliser std::thread sans exception, sinon quelles sont les alternatives que je peux utiliser?std :: fil sans exceptions?

En fait, je cible les bureaux Windows et Linux, mais cela pourrait être étendu à l'avenir.

éditer: en utilisant simplement les options du compilateur pour désactiver les exceptions, n'est pas une solution acceptable. Les erreurs doivent être transmises d'une manière ou d'une autre.

Le problème est que seules les exceptions qui sont utilisées dans mon code sont celles qui gèrent les erreurs std::thread. Je voudrais me débarrasser de ceux d'avoir un code exempt d'exception

edit2: J'ai trouvé la bibliothèque tinythread ++, il semble facile à modifier si nécessaire et fonctionne sans exceptions.

+0

vous pouvez utiliser ces exceptions aussi longtemps que vous déboguez votre projet. après cela, vous pouvez supposer qu'il n'y aura pas d'exceptions lancées simplement parce que les exceptions indiqueront des changements d'environnement inattendus. – Ali1S232

+0

Le vrai problème est que vous supposez que la création d'un thread réussit toujours. Habituellement, c'est aussi le cas, mais généralement c'est une mauvaise hypothèse. Il peut échouer, exceptionnellement. C'est la raison pour laquelle 'std :: thread' ** doit ** avoir des exceptions dans son constructeur, c'est la seule façon valide de communiquer l'échec (lancer' detach' et 'join', OTOH, est bull, ceux-ci devraient' affirmer ', comme il ne s'agit pas d'un "échec exceptionnel" à rejoindre un thread non jointable, c'est une erreur de programmation). Bien que, comme le suggère Luc B, il vous suffit de désactiver les exceptions si vous ne les aimez pas. – Damon

+0

"utiliser simplement les options du compilateur pour désactiver les exceptions, n'est pas une solution acceptable" Alors, utilisez des exceptions. Vous demandez essentiellement de désactiver une partie du langage C++ tout en utilisant le langage C++. – GManNickG

Répondre

1

Vous pouvez désactiver les exceptions STL, mais c'est différent pour chaque compilateur. Bien sûr, puisque la norme dit effectivement que certaines exceptions doivent être levées, chaque fois que vous faites quelque chose qui déclencherait une exception, vous obtiendrez un comportement indéfini.

En gcc vous désactivez les exceptions à l'aide -fno-exceptions

dans MSVC: Can I disable exceptions in STL?

+1

Un comportement indéfini n'est pas acceptable, j'ai besoin de gérer les erreurs d'une manière ou d'une autre. – Thelvyn

+0

@Thelvyn quel genre d'erreurs attendez-vous? –

+0

Par exemple détecter un échec de création de thread, puis nettoyez bien et signalez l'erreur. – Thelvyn