スレッドの悪夢

 タイマーを作成した、車輪の再発明という誹りは甘んじて受け入れますけど、地味に面倒くさかったです。

 タイマーなんてsleepで停止するだけじゃん? って思うじゃないですか、GUIでソレをやるとタイマーが鳴るまでアプリが固まるんですよね……

 しょうがないので別にスレッドを立てて並行処理でメインの画面が固まらないようにしました、しかしまた別問題が!

 スレッドって使い捨てなんですよね……

 今書いたやつはボタンを押すとスレッドが走るようにしていました。

 お察しの通り一回スレッドを生成して再利用しようとすると例外で落ちました。

 どうしたものかと悩んだ結果、タイマースレッドを生成する関数を用意して、ボタンが押されたらそっちを呼び出してスレッドを毎回生成するようにしました。

 面倒くさいんですよねえ……並行処理って……

 ちなみにテキストボックスにタイマーの秒数を入れる設計ですが、横着をして整数以外が入ったときは例外を掴んでいます。

 もうちょっとエレガントな方法があると思うんですが……しょうがないですね!

 二日目にもなるとここに全コードをコピペしたら警告がきそうな長さになってまいりました、ですので皆さんはこのエッセイは参考程度にしてくださいね。

 なお、このコードは消す予定ですが、バージョン管理システムさんのおかげで気兼ねなく消すことができます、ナイスですね!

 ついでにブランチを切ってテスト版を切り離しました。そして少々のリファクタリングを施します。

 関数がグローバルスコープにべた書きだったのでクラスにまとめてしまいました。そして関数名を少々変更……

 PyCharmが『お行儀が悪いよ』と丁寧に指摘してくれるのでそこを修正、以上、ラーメン作るときくらいは役に立ちそうなタイマーができました。

 そして……長い長いコメント作成が待っていました。

 そうです! 私はコメントなんて1行たりとも書いていなかったのです、関数の説明になるドックストリングまで含めてノーコメント!

 いやあ、悪夢でしたね。

 そしてスレッドまわりの面倒くささといったらないです、何が嫌ってメインスレッドで描画の更新をするのがお行儀がいいんですよねえ……

 つまりは秒数のカウントは別スレッドで行いながらメインスレッドでGUIの更新をする必要があるということです、控えめに言って面倒くさいです。

 幸い丁度いいafter関数があるのでソレを再帰呼び出しして処理しました。

 GUIのスレッド縛りがきついですがやりきりました。

 そしてお約束のバグ、フラグ管理があります。

 当然のごとく勝手に立ったり降りたりするフラグにイライラしながらやっとの思いで書き切りました。

 なお、ドックストリングまでちゃんと書きましたが多分誰も使いません、かなしい……

 さて、これをgithubに乗せてるんだからいい根性してますよね、我ながら……

 さあ冒涜的なコードができましたが、これ公開していいんでしょうか?

 雑の極みみたいなコードなのでプログラミング力で上の人がボッコボコに言ってくるか、それでもまだいい方でスターさえ付けられない可能性は大いにあります、現実って残酷ですね。

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

蛇使いの俺はバイナリと向き合おうと思います。 スカイレイク @Clarkdale

★で称える

この小説が面白かったら★をつけてください。おすすめレビューも書けます。

フォローしてこの作品の続きを読もう

この小説のおすすめレビューを見る

この小説のタグ