TinyThread ++を使用して独自のスレッドライブラリを構築しました。それはかなりうまくいっていて、私にとっても素晴らしい学習体験でした。私はメッセージを回すための独自のデータ構造を持っていますが、主に私が作者であったため、インターフェースは私にとっては意味があります。pthreadsと一緒に/からWin32 API機能を使用する
私のシステムでスレッドが作成されるたびに、それはループで実行され、時には自分の設計のメッセージ通過プロトコルによってメッセージをチェックします。
ここで、いくつかのWindows API機能を使い始めたいと思います。ウィンドウには独自の慣習やメッセージキューなどがあります。今ではTinyThread ++がpthreadsを使用していることは間違いありません。 MinGWを使用しているので、pthreadがWindowsスレッドに実装されているのだろうかと思います。この場合、私はpthreads-threadsをwindows-threadとして扱うことができるかもしれません。しかし、そうでない場合、私はいくつかの奇妙な行動に遭遇するかもしれないと思う。
編集:は、それが実際にスレッドを追跡するために窓HANDLE
を使用しても、それらを起動するために_beginthreadex
を使用するように見えるTinythreadで与えthread
タイプ++を見て。
私のpthreadsコードのいくつかの点からSetWindowsHookEx
を呼び出すと、私の質問は、Windowsがうれしいですか?私は同じスレッドでWindowsのメッセージポーリングループを持つ必要があることを理解しています。私はこのような何かをしようとしています:
try {
HHOOK mousehook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc,
NULL, 0);
if (mousehook == NULL) printf("Mousehook error %u\n",GetLastError());
while(true) {
MSG msg;
if (GetMessage(&msg,0,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
UnhookWindowsHookEx(mousehook);
printf("Procedure completed without exceptional events.\n");
} catch (...) {
printf("Exception!\n");
}
あなたは 'while'ループを終了することは決してありません。 – GSerg
あなたは正しいです。私はまだ私がどのようにクリーンアップを処理するかもしれないかを理解していません。 –
@GSerg、 'GetMessage'は' WM_QUIT'を受け取ったときに0を返すので、私はその時点でwhileループから抜け出すべきでしょうか? –