<p>The problem you are describing is familiar to me from experience with D/Go and interfacing X11 and OpenGL subsystems (or even sound systems, sometimes): regular C libraries/software expect the application to keep calling from the same thread it originally initiated the interaction from.</p>
<p>The way this is addressed in Go (which has no native threads concept) for example is by doing the (non-blocking) multiplexing of async signals in the main thread, while having all the "action" happen elsewhere. For reference, see <a href="https://github.com/golang/go/wiki/LockOSThread">https://github.com/golang/go/wiki/LockOSThread</a>.</p>
<p>How such centralized event-based approach would play with existing Geany functionality, that I can't tell and I do believe its limitations have probably already become evident from the attempts you mentioned.</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/geany/geany/issues/1458#issuecomment-292715890">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ABDrJ9AQauGAUFLm_dB-RGxa5p1OtlgWks5rt4H-gaJpZM4M1Ajm">mute the thread</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/ABDrJxNPolJITZuqTUSj_movMjZOCcmaks5rt4H-gaJpZM4M1Ajm.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/geany/geany/issues/1458#issuecomment-292715890"></link>
  <meta itemprop="name" content="View Issue"></meta>
</div>
<meta itemprop="description" content="View this Issue on GitHub"></meta>
</div>

<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/geany/geany","title":"geany/geany","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/geany/geany"}},"updates":{"snippets":[{"icon":"PERSON","message":"@gdm85 in #1458: The problem you are describing is familiar to me from experience with D/Go and interfacing X11 and OpenGL subsystems (or even sound systems, sometimes): regular C libraries/software expect the application to keep calling from the same thread it originally initiated the interaction from.\r\n\r\nThe way this is addressed in Go (which has no native threads concept) for example is by doing the (non-blocking) multiplexing of async signals in the main thread, while having all the \"action\" happen elsewhere. For reference, see https://github.com/golang/go/wiki/LockOSThread.\r\n\r\nHow such centralized event-based approach would play with existing Geany functionality, that I can't tell and I do believe its limitations have probably already become evident from the attempts you mentioned."}],"action":{"name":"View Issue","url":"https://github.com/geany/geany/issues/1458#issuecomment-292715890"}}}</script>