GUIとかQtとか関係ないアレン検証プラグイン作った
shibafu528/mikutter_passive_mainloop
https://github.com/shibafu528/mikutter_passive_mainloop
ボンクラプログラマー
頭とお腹が弱い。
最近は個人鯖の @shibafu528 がメインです。
⚠️ CW設定のない下品な発言が非常に多いです。これは仕様ですのでご了承下さい。
ℹ️ spam対策でフォロー承認制にしています。上の一文が構わないという方ならお気軽にどうぞ。
FINAL FANTASY XIV 関連の著作物は
(C) SQUARE ENIX CO., LTD. All Rights Reserved.
GUIとかQtとか関係ないアレン検証プラグイン作った
shibafu528/mikutter_passive_mainloop
https://github.com/shibafu528/mikutter_passive_mainloop
passive_mainloop、最近読んでたあるgemのおかげでこう書くという思い付きをした
> ピャーとかキキードンッとかヒヒィンとかデンカチャン!?とか言ってるばかりがシャニマスMADではない
> https://ch.nicovideo.jp/mekapi/blomaga/ar1987006
a, hai...
This account is not set to public on notestock.
GUIとかQtとか関係ないアレン検証プラグイン作った
shibafu528/mikutter_passive_mainloop
https://github.com/shibafu528/mikutter_passive_mainloop
しかも微妙に同期が取れてないので、スマホ側止めても追撃してくるから二度寝対策になっている…w
各管理サービスにてパッケージアップデートおよび再起動を実施します
shikorism.net, ertona.net が対象。
なんか昔リッピングしたやつ、WMA/64k, AAC/256k, MP3/128kが入り乱れててやべえつらいな
……あっこれQtのメインループに入ったらRubyの処理が割り込む余地がなくなって、それでdelayer-deferredのPromiseが解決に遷移しなくなってるのか!?
アレンタイマーでやることをDelayer.sizeの呼び出しだけにしてみた。すると、1つPromiseの解決と思わしきProcedureがキューされて、remain_hookが実行された。
しかしremain_hookで0ms QTimerを登録してるはずなんだが、こっちが実行されないな…
試しに1msにしてみたら怪しいエラー出た
QObject::startTimer: Timers can only be used with threads started with QThread
あー、QThreadに支配されてない別スレッドで実行されたからQtの処理キューが存在してないのか
問題は2つあったんだな
1. アレンタイマーで何かしらYARVに処理をさせないとRuby管理下のスレッドのスイッチが起こせない
2. メインスレッド以外からDelayerのreserve_hookが呼ばれたときの実装が不適切だった
Rubyが主になっていてiowaitしてる例はいくらでもあるが、うーむ。それとも、QtのメインループをGVL解放で実行すればいいのか?そんなことあるか?
いや考えにくいな、割り込みが必要かはRubyのコードが走ることがないと分からなそう
じゃあruby-gnomeでマルチスレッドプログラミングした時はどうなっているのか…?
4アレンタイマーで常にDelayerを蹴るなら、reserve_hookを追加しなくても結果的に実行されるから問題ないか
ruby-gnome glib2だとメインループにrb_thread_check_ints()を叩くだけのGSourceがアタッチされてるな
どうも関数名でググったらeventmachineとかでも使われてるっぽいが、はてさて
中学で英語やったときから三人称のバリエーションバカすぎるだろと思ってたけど、その時はポリコレバトルロイヤルで当のメインユーザー共がアホやるとは想像つかんかった
Delayerだけなら4アレンでタイマーすれば十分だけど、他のThreadの実行も許容しないといけないので一旦アレン続投。
呼び出し元Rubyスレッドをwait状態にしつつQApplication::exec()をGVL解放で実行して、QtのSignalからRuby処理系にアクセスが必要な時はGVL取り直すみたいなユーティリティを書けばアレン要らんかもしれん
ただexec()自体が戻ってこないからcancel callbackどうするんだろね
アレンはDelayer実行担当者からRubyの割り込み全般の実行担当者になったよ
Rb main thread
|--→ Rb sub thread
|join |--→ w/o GVL QApp::exec()
| | |
| |←--| return
|←--| finish
|
return
あっこれでいけるか
これならメインスレッドは待ちが必要であることをRubyが認識できるし、GVL解放でQtのイベントループに突入できそう
ん、そもそもrb_thread_call_without_gvlは即座に戻ってくるものなのか?
この絵フィリスちゃんの公式絵の中ではだいぶえっちな方だと思うので、これで隠せると?という感じがある
@toshi_a こいつを拡張するのではなくて、/tmpとしてもうちょっと可動であったり机程度の高さのやつが必要
無印スチールラックにキャスターextensionでほっつき歩くスチールラックを作るとちょうどよさそうなんだよな
今 retweet_user in ("lindwurm", "kb10uy", "tana3n") みたいな条件で「目の保養」タブに送ってるんだけど、まあ乳は目に良いから分ける必要ねえか…
まあKrile使ってたときはほたを「立川」タブに送ってたのと比べると全然ローコンテキストよ
This account is not set to public on notestock.
正解です、なぜならその後に作ったから。 (Krile StarryEyesはSQLiteに保存したツイートを抽出するシステムだから、DBから落ちなければ表示できるぞ!)
RubyからはFixnumを意識しなくなって久しいけど、CRubyのAPI触ってるとまだまだFixかどうかは意識が必要そうな雰囲気がありア
というかまあプリミティブなC型に落としこみたいならそりゃFixかどうかは重要なわけで
ある日目覚めたら - ニコニコ動画
https://www.nicovideo.jp/watch/sm38199015
ゲームをしないのにディスプレイの隣にはPS4とSwitchがあるんですよ、これ恐怖体験ですか?
グラボ買える金でゲーム用のグラボとストレージとコントローラのセットを買ってると言えなくもない
いやでもみんなハイエンドばっかり買っとるしなあ、そこまで計算能力積んでたらまあ単体で価値あるだろうけど、それ求めないとなるとな……
C++じゃなくて他に書かないといかんもんあるんだけど、なにせ目に見えて不思議な踊りをするプログラムは相手してて楽しいもので