19/01/19 02:02:18.49 eJ/T1GXt.net
OLE D&Dの資料は俺様も欲しいっす。
856:デフォルトの名無しさん
19/01/19 02:55:55.30 2Tiw7zAQ.net
みおぼえあるわ
857:デフォルトの名無しさん
19/01/19 03:12:53.98 n7alGXg6.net
見たら思い出しそうではあるが
858:デフォルトの名無しさん
19/01/19 06:43:28.33 wHcHNf+g.net
これとか?
OLE DragDrop (サンプル)
URLリンク(hp.vector.co.jp)
859:842
19/01/19 09:43:29.26 Lyax1h3i.net
>>846
そのページは昨日に到達してましたが、残念ながら違います。
確かOLEのD&DのページはC++で実装されてて、
IDropSource、IDataObject、IDropTargetの共通部分である
QueryInterface、AddRef、Release関数をIUnknownImplementという名前の
クラスを作ってそれをprivate継承してから、内部ではその親クラスの関数を呼び出す事をしていました。
IUnknownImplementという名前は自分のセンスではないのでそのページからそのままコピペしたのだと思います。
以前はOLE D&Dで検索すると難なく到達出来てたので消失したと思われます。
誰かブックマークしてて今では消えてるページのURLとかでそれらしきものがないでしょうか?
860:デフォルトの名無しさん
19/01/19 10:35:14.95 S211ls6J.net
>>847
ブラウザの履歴
861:を検索したら出てこない?
862:デフォルトの名無しさん
19/01/19 11:05:14.74 E3pxDp1L.net
NGチェックで貼れないサイトがあるな
atata sakura ne jp . /com/chap5.html
atata sakura ne jp . /com/chap7.html
URLリンク(docs.microsoft.com)
URLリンク(gist.github.com)
863:デフォルトの名無しさん
19/01/19 11:10:10.62 E3pxDp1L.net
URLリンク(eternalwindows.jp)
URLリンク(rarara.cafe.coocan.jp)
864:デフォルトの名無しさん
19/01/19 11:17:26.03 ie4pzIPS.net
これ?
URLリンク(eternalwindows.jp)
865:デフォルトの名無しさん
19/01/19 18:27:05.61 a3eM+T1s.net
>>841
そう?
メインウィンドウよりでかいフローティングウィンドウなんて見たこと無いんだよな
866:デフォルトの名無しさん
19/01/20 11:49:19.90 h0iPP/nj.net
朝鮮人メンタル
867:842
19/01/20 15:59:03.36 CaWvoORx.net
>>848
最後にアクセスしたのも大分前なので。その間にPCも変わってたりしますし。
>>849 >>850 >>851
残念ながらそれらでもないですね。
今日も探していたのですが見つからずもう諦めてきた感じです。
その際に副産物で見つけた、既にサイトが無くなってたページと
そのInternet Archivesを張っておきます。
かなりこの手の情報が消失してる事が判りますね。
URLリンク(www.g-ishihara.com)
URLリンク(web.archive.org)URLリンク(www.g-ishihara.com)
URLリンク(win32lab.com)
URLリンク(web.archive.org)URLリンク(win32lab.com)
URLリンク(web.kyoto-inet.or.jp)
URLリンク(web.archive.org)URLリンク(web.kyoto-inet.or.jp)
URLリンク(ruffnex.oc.to:80)
URLリンク(web.archive.org)URLリンク(ruffnex.oc.to:80)
URLリンク(www7.plala.or.jp)
URLリンク(web.archive.org)URLリンク(www7.plala.or.jp)
868:デフォルトの名無しさん
19/01/21 07:38:46.81 5BrFA625.net
> top-level の定義は、親が存在しない (CreateWindow 実行時に NULL が指定され
> ている) Window だ、って英語で書かれているよ。
最大の突っ込みどころは根拠が「英語で書かれている」のみ
869:デフォルトの名無しさん
19/01/21 10:35:20.85 UEk4ntQa.net
>>855
The MSDN entry About Windows offers the following definition: A window that
has no parent, or whose parent is the desktop window, is called a top-level window.
URLリンク(stackoverflow.com)
A top-level window is a window that is not a child window, or has no parent window
(which is the same as having the "desktop window" as a parent).
The MSDN entry About Windows offers the following definition:
A window that has no parent, or whose parent is the desktop window, is called
a top-level window.
870:デフォルトの名無しさん
19/01/21 16:33:26.70 5BrFA625.net
>>856
引用元にCreateWindowは出てこないわけだが
871:デフォルトの名無しさん
19/01/22 12:47:25.26 /p6ZcYuK.net
no parentでそれぐらいわかるだろ
872:デフォルトの名無しさん
19/01/22 13:04:37.64 /wbMKv3O.net
PPAP
873:デフォルトの名無しさん
19/01/23 01:51:43.39 fK1BYch6.net
msdnのAbout WindowsのParent or Owner Window Handle
"A window that has a parent is called a child window. "
childでparentがnullの場合はtoplevel
"A window can own, or be owned by, another window."
ここからmsdnのWindow FeaturesのOwned Windowsに移動して
CreateWindowのhwndParentの話になる
要は、child(WS_CHILD)はparentを持ちownerを持たない
WS_POPUPやWS_OVERLAPPEDはparentを持たずownerをもつ
CreateWindowのhwndParentはparentかowner(両義性がある)
874:デフォルトの名無しさん
19/01/24 18:27:16.16 /05KE7l4
875:.net
876:デフォルトの名無しさん
19/01/27 08:58:04.40 Z8Sr7X5M.net
という訳で
CreateWindow hwndParent != 0, WS_OVERLAPPED or WS_POPUPだと
"A window that has no parent, or whose parent is the desktop window, is called
a top-level window. "
のとおり、top-levelになる
877:770
19/01/27 18:15:04.65 qHVP6gPn.net
私は“「Palatino Linotype」フォントでHDCにテキスト描画すると星印「★(U+2605)」などの記号が文字化け扱いされて四角になる”件について質問した者です。
みなさん、何の役にも立たない知ったかぶりの回答ありがとうございました。2019年1月22日にリリースされたKB4476976で無事、修正されたようです。
URLリンク(support.microsoft.com)
テキスト コントロールで、一部の記号が四角形で表示される問題を修正します。
878:デフォルトの名無しさん
19/01/27 22:30:57.69 I4R/P36r.net
>>863
Palatino Linotypeに★(U+2605)は存在しない(>>776)し、
その場合の代替フォントの扱いがてきとうだった(>>778)のが、
KB4476976で修正されただけだろ。
879:770
19/01/27 22:57:15.58 qHVP6gPn.net
>>864
知らないんなら憶測で書き込まないでくれるか?
そういう憶測の書き込み、質問者が混乱するだけで意味がないんだよ。
スレのレベルが下がるからこのスレには書き込みを控えてくれ。
URLリンク(en.wikipedia.org)
880:デフォルトの名無しさん
19/01/27 23:00:10.55 biLrTPET.net
>>863
>みなさん、何の役にも立たない知ったかぶりの回答ありがとうございました
こいつは、荒らしだろ。
無視しろ。相手をするな!
881:デフォルトの名無しさん
19/01/27 23:07:56.82 Z8Sr7X5M.net
> スレのレベルが下がる www
882:デフォルトの名無しさん
19/01/27 23:13:55.20 15mfyiko.net
>>865
そのリンク先に意味無いだろ。
荒らしたいだけか。
883:770
19/01/27 23:21:03.57 qHVP6gPn.net
>>868
リンク先は星印についての英語版Wikipedia。見ればわかるとおり、星印★は欧州で普通に使われている。
日本語のひらがなや漢字を代替フォントで痴漢できているのに、欧州でもよく使う星印★が代替フォントで痴漢できない不可解な状態がようやく解消された。
884:770
19/01/27 23:26:16.39 qHVP6gPn.net
このスレは「です・ます」調で質問を書き込むと、的外れでレベルの低い回答が返ってきやすい。
この手の回答者には、丁寧語を使うのは不慣れな初心者と値踏みして質問者へのいたずらで無駄な作業をやらせてやろうという悪意がある。
885:デフォルトの名無しさん
19/01/27 23:53:38.21 eqe5Jbhe.net
文字コード表で「Palatino Linotype」のU+2605が存在しないことに何も間違いなかったでしょ?
そのことに気付かず指摘されて初めて分かった人が何言ってるの?
886:デフォルトの名無しさん
19/01/28 00:07:05.80 +M9WQ/f8.net
元から代替フォントの問題だと指摘されていたし、何も間違っていないな
質問された時にはまだ修正されていなかったのだし
887:770
19/01/28 00:10:03.58 FJ2d04ee.net
>>871
欧州フォントにはU+2605だけじゃなくて漢字やひらがななども存在しないよ。
欧州フォントにない記号が表示されないことを仕様であるかのように知ったかぶりで断定するデタラメな回答はアウト。
888:770
19/01/28 00:40:47.00 FJ2d04ee.net
ちなみにPalatino Linotype のような欧州フォントは雄雌記号の♂(U+2642)と♀(U+2640)が少しイラストっぽく表示されるので、お試しあれ。
889:デフォルトの名無しさん
19/01/28 00:40:53.70 J+udoZHz.net
>>873
さすがにアホ
890:770
19/01/28 00:55:58.16 FJ2d04ee.net
Win32APIの不具合なのか新しい仕様なのか判断できない人は質問に回答したらダメでしょ。
891:デフォルトの名無しさん
19/01/28 01:15:13.62 j971hPKN.net
> 欧州フォントにはU+2605だけじゃなくて漢字やひらがななども存在しないよ。
欧州フォントでも漢字表示できるの?
はえーすっごーい
892:デフォルトの名無しさん
19/01/28 01:59:38.49 yOibm1qy.net
言い方は忘れたけど、確か、Forwarding や Redirecting みたいな機能が
あって、グリフが存在して無い文字は、他のフォントのグリフを使用する
ことができる機能が Win32 には備わっていたと記憶している。
893:デフォルトの名無しさん
19/01/28 02:08:56.48 jKaiFfBH.net
URLリンク(superuser.com)
・Font Fallback
・Font Linking
894:デフォルトの名無しさん
19/01/28 06:24:36.00 yQjFtWDc.net
>>874
それも代替フォント選択がいい加減だから=バグだよw
895:デフォルトの名無しさん
19/01/31 18:23:03.18 zuTwaubK.net
WS_HSCROLL や WS_VSCROLL スタイルを指定してスクロールバー付きの
ウィンドウを作った場合なんですが、スクロールバーのつまみをスライドさせると
親(?)がWM_CAPTURECHANGED を受信してしまうのは仕様なのでしょうか。
クライアント領域内の画像をドラッグ&ドロップする処理(WM_LBUTTONDOWN で SetCapture(),
WM_LBUTTONUP でReleaseCapture() 呼び出す)を書いているんですが、それに加えて
WM_CAPTURECHANGED でも ReleaseCapture() を呼び出して Alt+Tab などでウィンドウが
切り替わった場合でも確実にキャプチャが解放されるように処理しています。
ところがこのように WM_CAPTURECHANGED を処理すると、スクロールバーのつまみをスライド
させることが出来なくなってしまいます。おそらく Windows がつまみをスライドする直前に
SetCapture() を呼び出しているために、WM_CAPTURECHANGED を受信した瞬間それが解放されて
しまうからだと想像しています。
この問題に対処する一般的(標準的?)な方法はあるのでしょうか?
よろしくお願いいたします。
896:デフォルトの名無しさん
19/01/31 18:37:28.68 J/ff8w5v.net
マウスを直接やって独自実装やるんじゃなくてwindowsのドラッグアンドドロップとして機能実装するのが一般的
897:デフォルトの名無しさん
19/01/31 18:48:17.83 zuTwaubK.net
881です。
>>882
WindowsにD&D処理を支援する機能があるということなのでしょうか。
画像のドラッグ中はフラグを立てておけば良いのではないかと、いま思いつきました。
// 修正前
case WM_CAPTURECHANGED:
if (GetCapture() == hWnd)
ReleaseCapture();
return 0;
// 修正後
case WM_CAPTURECHANGED:
if (dragging)
ReleaseCapture(), dragging = false;
return 0;
こんな感じで、ちょっと試してみようと思います。
898:デフォルトの名無しさん
19/01/31 19:14:06.85 VYsToa/P.net
ウィンドウが切り替わったって事はWM_KILLFOCUS飛んでくると思うけどそれじゃダメなん?
899:デフォルトの名無しさん
19/01/31 19:33:52.56 zuTwaubK.net
881です。
>>884
Alt+Tabのほか、キャプチャ中にEscキーが押下されたためにウィンドウがクローズするタイミングにも
対応しなければならないようなんです。ウィンドウが閉じるときは WM_KILLFOCUS を
受け取らないようなので WM_CAPTURECHANGED しかないのかなと思いました。
900:デフォルトの名無しさん
19/01/31 19:40:12.79 VYsToa/P.net
WM_KILLFOCUSとWM_CLOSEよりWM_CAPTURECHANGEDの1箇所で処理したいって事なのかな
901:デフォルトの名無しさん
19/01/31 19:50:33.62 zuTwaubK.net
>>886
状況に応じて対応する手もあると思うのですが、予測していなかった状況がまだあるかもしれないので
一カ所で処理したほうが無難なのかな、と考えています。
902:L
19/02/01 01:20:53.20 WOdIBupf.net
>>887
基本、>>883 見たいなやり方でいいんじゃないかな。
後、個人的には、Spy++みたいなものでメッセージの来る順序を
観察してそれに応じて「アルゴリズム(←大げさかも)」を考えてる。
Windows の場合、OSのバージョンアップでメッセージの飛んでくる
仕様が変わったりするかも知れず、もしかしたら動かなくなることも
あるかも知れないが、「行儀よくプログラムすれば」それを防げる
という単純なものではないと思ってる。なぜなら、何が行儀の
良いプログラムがそもそもドキュメント化されていないし。
という訳で、現存する全てのバージョンのWindows OSで実験して
動くかどうか確認して動かなければ修正し、新しいバージョンのOS
が出てきたら、また実験する事で対応するしかないらしい。
2ch/5ch の書き込みによれば、「どんな場合にも対応できる
プログラムなんて作れるわけがない」んだそうだで、それを
聞いて深く考えさせられたことがある。
903:デフォルトの名無しさん
19/02/01 01:29:58.10 WOdIBupf.net
>>888
[続き]
MSDNなどで、自分のやりたいことを探すと、近いものが見つかって、
「これこれこうすれば良い」と書かれていることがあるので、実際に
やってみたとしても、後々、さまざまな不具合と独自機能拡張の難しさに
悩まされ続けることがある。そのたびにネット中を探し回ったり、
色々実験して対処することになる。
でもよくよく考えてみると、そもそも自分で0から実装すると意外と簡単な
ことであったりして、全部自分の制御下にある分、調べる必要もなく、
むしろ時間の節約になったりする事が多い。
904:デフォルトの名無しさん
19/02/01 01:44:48.22 n6bcSVs+.net
>>889
FindFirstFileのワイルドカードはあまり当てにするな、まで読んだ。
905:デフォルトの名無しさん
19/02/01 04:13:32.40 2psUfhCM.net
MFTを直接読みなされ
906:デフォルトの名無しさん
19/02/01 17:50:15.61 IACxdzc7.net
>881
ScrollBarのつまみをLButtonDownしたままマウスポインタをつまみから外してドラッグするとつまみの位置は移動します。ということはCaptureしています。
スレッドのCaptureはひとつしかないので、事前のCaptureは解放され、WM_CAPTURECHANGEDが通知されます。
あと、WM_CAPTURECHANGEDでReleaseCaptureするのは無意味です。
907:デフォルトの名無しさん
19/02/01 18:19:28.05 WOdIBupf.net
>>892
>WM_CAPTURECHANGEDでReleaseCaptureするのは無意味です。
ああ、そういえば、そうだった気がする。メッセージの
Caputure Changed という名前からしても。
908:デフォルトの名無しさん
19/02/01 18:35:25.24 kGNgvrty.net
キャプチャ中のAlt+Tabなどは、WM_CANCELMODEというものもある
909:デフォルトの名無しさん
19/02/01 18:50:09.36 WOdIBupf.net
>>894
あー、そういえば海外のサイトを調べていたら、
「ALT+TAB でも Capture がどうのこうのなるから、
正しくは、これこれこんな風にプログラムしなければならない」
みたいに書いてあった。ALT+TABを使わなければ生じないことなので、
後回しだな、と思ったのでちゃんと理解してない。
910:デフォルトの名無しさん
19/02/01 18:53:12.96 WOdIBupf.net
「Using SetCapture() and ReleaseCapture() correctly (usually during a drag n' drop operation).」
URLリンク(www.codeproject.com)
「Avoiding Trouble with Mouse Capture」
URLリンク(www.drdobbs.com)
911:デフォルトの名無しさん
19/02/01 18:55:01.83 WOdIBupf.net
// THE RIGHT WAY OF DOING IT:
//* <- Remove a slash to comment out the good version!
case WM_LBUTTONUP:
ReleaseCapture();
return 0;
case WM_CAPTURECHANGED:
g_MovingMainWnd = (HWND)lParam == hWnd;
return 0;
/**/
// THE WRONG WAY OF DOING IT:
/* <- Prefix this with a slash to uncomment the bad version!
case WM_LBUTTONUP:
g_MovingMainWnd = false;
ReleaseCapture();
return 0;
// buggy programs usually do not handle WM_CAPTURECHANGED at all
case WM_CAPTURECHANGED:
break;
/**/
912:デフォルトの名無しさん
19/02/07 12:26:45.88 kmlzmIx7.net
PCをXPからwin8.1 64bitに移行したんだけど、自作のソフトがいくつか動かない。デバックしてみたら、GetDC(0)→GetPixelやっている所でフリーズしているみたい。
win8でGetDC(0)は駄目だったりする?
913:さまよえる蟻人間
19/02/07 12:30:15.66 trMMLIP2.net
GetDCはウィンドウに対するDCを返す関数だから、ウィンドウに関係ないなら、CreateCompatibleDC(NULL)/DeleteDCに変えてみい。
914:デフォルトの名無しさん
19/02/07 13:23:19.52 FsbblVW+.net
>>898
DWM(Aero) の場合と、そうでない場合とで surface backend が有る無いの違いがあるには
あるが、一応、GetDC(NULL) が Screen 全体の DC を得るということは仕様化されているので、
新しいOSでも動作自体は出来ないわけではないと思う。
URLリンク(social.msdn.microsoft.com)
Under DWM (Aero) each window has its own surface backed up by GPU memory.
Without DWM, that is under classic renderer, all pixels covered by another
window are simply discarded. To detect whether DWM is currently running
and enabled use DwmIsCompositionEnabled function.
[ブラウザ上の新OSの紹介]
URLリンク(nowsmartsoft.atwebpages.com)
915:デフォルトの名無しさん
19/02/07 15:13:59.88 GcZVZFC2.net
>>898
一回コピーを作らないとだめ
916:デフォルトの名無しさん
19/02/07 19:21:59.34 /5LF0iCd.net
>>898
Aero環境ではGetPixelがとてつもなく遅くなるというやつじゃないの?
917:デフォルトの名無しさん
19/02/08 16:13:48.70 OJ5k9nKR.net
Win8.1はAeroじゃなくてMetroだから違うのでは。
918:デフォルトの名無しさん
19/02/09 07:34:09.50 VoK7d33Y.net
そういったシステム上の差異をブラックボックス化して吸収するのがSDKなりライブラリの役割だと思うんだけどな。
なんでこうも面倒なのかね。
919:デフォルトの名無しさん
19/02/10 00:56:19.51 B31yNMWe.net
AeroやMetroはライブラリだから
920:デフォルトの名無しさん
19/02/10 09:55:16.21 jvY/9N9p.net
Quattroは大佐だから
921:デフォルトの名無しさん
19/02/10 14:10:30.78 25jgEgQt.net
5ちゃんはチラシの裏だから
922:898
19/02/10 14:41:50.30 pMKPJfwr.net
遅ればせながら、ご教示していただいた皆様、ありがとうございます。
15年以上前にVC6で作成したソースをもとしたソフトだったので、これを機会に作り替えすることにしました。
今回は、.netのCopyFromScreenからBitmapを作成してGetpixelしてみます。
他にも、mixer関連で取得変更できてなかったり、手を入れなければならないソフトがいっぱいありそう
923:sage
19/02/10 15:07:59.97 FHx5KBLx.net
元々SetPixelを呼び出すごとにDrvBitBltしていたので遅かった
924:デフォルトの名無しさん
19/02/10 18:15:03.40 qfB3Qf/j.net
managedだとピクセル単位の処理はunsafe使わないと遅いよ
百倍以上の差が出る
925:898,908
19/02/12 14:13:36.96 ArFYaOAy.net
マスターボリュームが変更されたらWAVE音量を同じ値に変更するということを、XPではMixerAPIを使って出来てましたが、win8では出来なくなりました。
それでネットをあさってて、マスターボリュームはIMMDeviceのGetDefaultAudioEndpointで取得出来ることが分かりましたが、WAVE音量を変更する方法が不明です。
どなたか教えてください
926:デフォルトの名無しさん
19/02/12 15:38:56.47 7Y/Mu4tq.net
Vista以降ミキサーの仕様が変更されててwave音量の項目自体なくなってないか?
927:デフォルトの名無しさん
19/02/19 22:54:47.64 mfSiw2KQ.net
LLHOOKか何かで、ユーザーの入力は全部遮断しつつ、
SendInputやkeybd_eventやらのプログラム由来の入力は通すようにしたいのですが、
何か方法ないでしょうか?
今はHIDデバイスを無効にする事を考えてますが、あんまやりたくないです。
928:デフォルトの名無しさん
19/02/20 15:53:14.16 rNooXWfe.net
㍼とか㍻などの合字が出力されるWin32APIってどんなのがあるの?
929:デフォルトの名無しさん
19/02/20 18:03:14.01 P1QqcLfo.net
>>914
無いんじゃないの。
930:デフォルトの名無しさん
19/02/20 18:04:45.23 eMhiTtf4.net
普通に合字に対応する文字コードを文字(列)出力/描画 APIに渡すだけだと
思う。それ以上のことをやりたい場合は、自分でプログラムしたらいいよ。
931:914
19/02/20 18:12:05.06 rNooXWfe.net
元号の合字の件、以下のニュースが気になって質問したんだけど、
Win32APIが使わないなら誰がどんな用途でわざわざレジストリを開いて合字を探すのか気になった次第。
Microsoft、「KB4487044」適用で元号に不具合 - PC Watch
URLリンク(pc.watch.impress.co.jp)
932:さまよえる蟻人間
19/02/20 18:13:20.05 AQq/x/Lj.net
LOGFONT.lfWidth、CreateFontIndirect、SelectObject、TextOut/DrawTextを使えば半角漢字を描画できる。
933:さまよえる蟻人間
19/02/20 18:15:28.65 AQq/x/Lj.net
元号については、ここに詳しく書いてあるよ。
URLリンク(docs.microsoft.com)
934:さまよえる蟻人間
19/02/20 18:22:20.03 AQq/x/Lj.net
元号のAPIを追加するより、レジストリで定義する方が得策だね。事前テストも出来るし。
935:デフォルトの名無しさん
19/02/20 18:45:40.96 EHsoFK41.net
>>917
㍼とか㍻ってただの文字コードに対応した文字
ただ、いわゆる機種依存文字なので、その文字コードを想定していない
クソアプリが死ぬって話がその記事に書いてることなのでは?
レジストリに記録されてるのは元号と西暦の対応で、
その情報を使いたいアプリが好きに使えばいいだけの話
APIでそこ多分見てる(見てないかも知れんが)のは
GetCalendarInfoやEnumCalendarInfo系あたりじゃなかろうか
今回の件でこいつらが問題を起こすとは書いてないと思うが
936:さまよえる蟻人間
19/02/20 18:49:44.36 jAMIqMc6.net
新しい元号のUnicodeのコードポイントはもう決まってるらしいよ。
937:914
19/02/20 19:12:38.68 rNooXWfe.net
GetDateFormatEx()で書式ggは元号に置き換わる。合字の書式はそもそもあるの、どうなの。
938:デフォルトの名無しさん
19/02/20 19:45:56.26 v7iPz90J.net
森鷗外𠮟る
939:デフォルトの名無しさん
19/02/22 21:29:35.92 kVQHKw0G.net
WaitForSingleObjectやWaitForMultipleObjectsってspurious wakeupがあるから使うなと言ってる先輩がいるけど
本当ですか?
940:デフォルトの名無しさん
19/02/22 21:44:37.57 x13qkxfg.net
spurious wakeupがある→正しい
使うな→よりより代替手段がなければ使うしかない
代替手段があるかどうかは環境によるから先輩ちゃんに聞く
941:デフォルトの名無しさん
19/02/22 22:18:48.32 JuVjm6Gn.net
URLリンク(docs.microsoft.com)
条件変数のAPIではspurious wakeupsに言及がある、ただしWaitForSingleObjectなどでは言及が見つからなかった
URLリンク(stackoverflow.com)
出典不明だがWaitForSingleObjectはspurious wakeupが起こらないとある
WaitForMultipleObjectsExでは、bAlertableにTRUEを渡せばspurious wakeupが起こりうるらしい
先輩の情報源を知りたい
942:デフォルトの名無しさん
19/02/22 22:23:38.90 qRCx8JnJ.net
同期オブジェクトが非シグナル状態でWaitFor系関数から勝手に戻ってくることはないと断言できる
仕掛けるオブジェクトに依ると思う
943:デフォルトの名無しさん
19/02/22 22:27:18.85 qRCx8JnJ.net
ただし単に寝ていたスレッドが起きるという現象自体は外部のCPU負荷調節アプリとかでResumeTheradを発行することで簡単に再現できる
944:デフォルトの名無しさん
19/02/22 23:11:25.13 4O+31NpZ.net
魔王も勇者が入って来ただけで起きるしな
945:デフォルトの名無しさん
19/02/22 23:26:13.44 7tzQnSDu.net
そもそも何をWaitFor系関数で待つのかってのも大きい。自作Signalオブジェクトなら問題起きないでしょ。
946:デフォルトの名無しさん
19/02/23 07:23:17.25 9pAAXdf2.net
>>927
以前、2つのプロセス間で、WaitForSingleObject() を CreateEvent(), SetEvent() 系
の HANDLE で実験してみたけど、バグ的な現象は起きず、至って正常に動作し、
2つのプロセスで、お互いに、SetEvent() したり、WaitForSingleObject() で
相手を待ったりして、ハンドシェイク的な振る舞いが思ったとおりに出来ることが
確認できた。
速度も、SetEvent() した事が相手に届くまで、確か、1(μs)前後だったので、
十分速いと結論付けた。
947:デフォルトの名無しさん
19/02/23 08:40:48.30 zem2FMDi.net
C++標準のwait系にはあるからいちいち確認するしなきゃいけないから面倒だよな
しかも、イベントだけ使いたいのにいちいちmutexをよういしなきゃいけないし・・・
948:デフォルトの名無しさん
19/02/23 11:36:21.35 +DV3f+Dk.net
都市伝説かも知れんが
そもそもいつ発生するか判らない発生しないかも判らない現象を
ちょっとテスト書いてみて大丈夫(キリつ
949:デフォルトの名無しさん
19/02/23 11:54:16.12 apHI25Q1.net
条件変数ならともかく、Eventなんかはspuriousで起こされても確かめようがないんじゃないのかな。
950:デフォルトの名無しさん
19/02/23 16:03:56.92 qOMwbnHQ.net
同期機能は同期機能としてそのまま利用しつつ、最低限の安全性や整合性については別途確認すべきなのでは。
951:デフォルトの名無しさん
19/02/23 18:44:58.70 9pAAXdf2.net
WaitForSingleObject() には、MSDN の仕様書に書かれていないような意味においての
バグ的な spurious wakeup は起きないと思う。
なお、実験する限り問題ないが、絶対ないかどうかは誰にも分からない。
952:デフォルトの名無しさん
19/02/23 18:57:16.07 Cx5sxFW5.net
c++標準ライブラリには堂々と書かれてるな
Windowsだとc++標準ライブラリを使う理由がないな
953:デフォルトの名無しさん
19/02/23 19:07:25.29 9pAAXdf2.net
同期オブジェクトは重要。
仕様書に何も書いてないのに、もし、spurious wakeup が起きるとしたらバグ。
なお、C++ の STL ライブラリは馬鹿が作ったと思ってる。
昔ながらの C の標準ライブラリは良い出来だが、それと混同しないほうがいい。
954:デフォルトの名無しさん
19/02/23 20:04:03.30 qOMwbnHQ.net
C++のSTLとCライブラリでは機能が似ているところはない気がするけど?
念のため言っとくとiostreamはSTLじゃないよ。
955:デフォルトの名無しさん
19/02/23 20:24:45.58 7js9m1kN.net
つーかspurious wakeupなんて存在を許してる時点で作ったそいつらはアホじゃないの
そいつらのリテラシーどうなっとんのか疑うレベル
956:デフォルトの名無しさん
19/02/23 20:32:05.22 qOMwbnHQ.net
汎用性のためにファイルロックを使った排他処理で実装するとそうなってしまうんじゃないの。知らんけど。
957:デフォルトの名無しさん
19/02/23 22:14:41.32 apHI25Q1.net
厳密にspurious wakeupを許さない実装は大変でパフォーマンス的にも不利だから。
というか、spurious wakeupを許すとすごく有利だというのが後から発見されたんじゃなかったかな。
958:デフォルトの名無しさん
19/02/24 02:55:03.61 ZXw7vz2Z.net
っていうか、win環境ならC++標準ライブラリよりWaitFor~を使ったほうがいいだろ
std::unique_lockなんで馬鹿みたいに遅いしw
959:デフォルトの名無しさん
19/02/24 04:17:10.21 N5G83Lpp.net
>>937
WaitForSingleObject()ってエラー返すことがあるよね?仕様上では。
要はちゃんとエラーハンドリングしろって話だけどさw
960:デフォルトの名無しさん
19/02/24 08:23:50.21 pcDSz9Pr.net
>>943
プログラムには優先順位があって、まず、正しく動作する事が一番重要。
その次に来るのが、使いやすさか、または、速度。どちらが優先されるかは
設計思想や哲学による。その次にプログラムのサイズ。
いくら速度が速くても、やるべきことが正しく行われないならプログラムとしては
失格なんだ。
961:デフォルトの名無しさん
19/02/24 08:36:16.85 fWdsplTz.net
「sprious wakeupもありえる」というのを「正しい動作」と定義したんだから何の問題もない。
962:デフォルトの名無しさん
19/02/24 08:48:33.63 pcDSz9Pr.net
それだと、使う側のプログラムが長くなるだけなので、設計思想に問題を感じる。
ライブラリ設計者の経験不足かもしれない。
速くなるといっても結局、使う側でループの中で判定して条件に合わないなら、
また繰り返し、wait するのなら、ライブラリ側でそういう風にできなかったの
だろうか。
963:デフォルトの名無しさん
19/02/24 09:42:01.89 pcDSz9Pr.net
深く考えてないけど、以下のようにしてしまえば、速度が速いまま、
spurious wakeup が絶対に起きない wait 関数を作れるんじゃないかと
思うんだけど、どうなんだろう。
Xxxx LapperWait(Yyyy y, Zzzz z) {
for (;;) {
raw_wait(y, z); // spurious wakeup 有り
if ( IsCond(y, z) ) { // 厳密な条件チェック
return x;
}
}
}
964:デフォルトの名無しさん
19/02/24 10:03:24.37 9KBfjXtA.net
>>949
深く考えてから書き込みましょう。
ぼくのかんがえたさいきょうの同期実装についてはスレ違いなので、よそでやってください。
965:デフォルトの名無しさん
19/02/24 14:42:49.21 YwY0sV++.net
LoopyWaitでいいよもう
966:デフォルトの名無しさん
19/02/24 15:26:11.06 BJ3WFlaM.net
「sprious wakeupもありえる」のはいいが、
どのAPIも使うたびにいちいち関数仕様確認するのは面倒だな
つーか関数の説明には書いてないので仕様とは言えないと思うんだが・・・初見殺し?
967:デフォルトの名無しさん
19/02/24 15:39:02.49 2tRfk65D.net
>>952
初めて使うAPIでしかも同期処理なんて複雑なものは仕様を調べて使うのが当然のことだと思うぞ。
968:デフォルトの名無しさん
19/02/24 16:04:30.12 N5G83Lpp.net
>>949
raw_wait(y, z); // spurious wakeup 有り
と
if ( IsCond(y, z) ) { // 厳密な条件チェック
の間で条件が変わったらどうするの?
969:デフォルトの名無しさん
19/02/24 16:07:02.11 EMRtI4X3.net
>>954
え、それはプログラミングの仕方の問題じゃないの?
元々、マルチスレッドプログラムは難しいんだけど、それと今回の
問題は別なのでは。
970:デフォルトの名無しさん
19/02/24 16:08:45.84 N5G83Lpp.net
>>955
どうやってプログラムで回避するの?
回避できないんだったら「絶対に起きない」なんて言えないだろ。
こんなレベルで排他処理語られても...
971:デフォルトの名無しさん
19/02/24 16:14:47.34 pcDSz9Pr.net
>>956
もともと、排他処理用のAPIは、そういう「変な問題が起きない」ように用意されて
いるんだよ。「Atomic」アクセス、などと言われていて、「途中に」とか
中途半端な状態が起きない作りにしてある。それは割り込み発生を好きにOFFに
できるところのシステム側(OS)でしかできない。
972:デフォルトの名無しさん
19/02/24 16:16:16.11 pcDSz9Pr.net
なぜかIDが勝手に変わったが、949=955=957だ。
973:デフォルトの名無しさん
19/02/24 16:17:26.62 9KBfjXtA.net
同期オブジェクトの正確性ではなく、ユーザ定義データの保護こそが大切。目的を見失わないように。
974:デフォルトの名無しさん
19/02/24 16:18:28.55 pcDSz9Pr.net
ちなみにオイラは、32BITマルチタスクOSを作った経験がある。
975:デフォルトの名無しさん
19/02/24 16:24:01.17 Krr3p0wT.net
>>949
シングルスレッド脳だとそういう発想になる
976:デフォルトの名無しさん
19/02/24 16:34:48.90 9KBfjXtA.net
たまにかかってくる間違い電話がいやだから電話は無能。そんな感じ。
977:デフォルトの名無しさん
19/02/24 16:36:35.10 2fcQjxFq.net
Atomicを語るならID変わらないようにしないと恥ずかしいな
978:デフォルトの名無しさん
19/02/24 16:41:49.67 pcDSz9Pr.net
IDが変わる理由は知らん。多分、5chのシステム上の問題だと思う。
979:デフォルトの名無しさん
19/02/24 16:43:05.47 pcDSz9Pr.net
沢山の人で賑わっているように見せるためかな。人寄せと広告料金関連で。
980:デフォルトの名無しさん
19/02/24 16:46:55.09 9KBfjXtA.net
コールバック形式のAPIを使うプログラマはその呼び出しタイミングをAPI側に委ねている。
何がいいたいかというと、要するにあきらめろということだ。
981:デフォルトの名無しさん
19/02/24 17:53:55.79 N5G83Lpp.net
>>957
それが起きるからどうするという話で、
あんたが糞の役のも立たないコードを出したんじゃん。
つまり>>954はクソだったと認めるということ?
982:デフォルトの名無しさん
19/02/24 18:01:12.16 pcDSz9Pr.net
>>697
多分、あのコードで問題ないはずだ。
ちなみに、オイラは現実社会では天才と言われているよ。
983:デフォルトの名無しさん
19/02/24 18:31:20.56 9KBfjXtA.net
車のバンパーは本来、ボディを保護するためにある。
そのバンパーに傷がついたりへこんだりすることを病的に嫌悪している状態。
お大事に。
984:デフォルトの名無しさん
19/02/24 18:39:12.54 fWdsplTz.net
もしそのraw_wait()がP命令だとしたらその結果がspuriousのときはV命令で状態を戻さなきゃならんと思うが。
ただどっちにしてもそのIsCond()はライブラリ側では構成しようがないけどな。
あと、やっぱりspurious wakeupって条件変数特有のものじゃなかったかな。
なんかそのへんで話がずれている気がする。
985:デフォルトの名無しさん
19/02/24 18:54:16.69 EMRtI4X3.net
>
986:;>970 どういう状況を考えてるのか前提が分からないし、だから 「深く考えてない」 という事になってしまうのだけども。少なくとも、Win32のWaitForSingleObject() では特に問題は起きない。
987:デフォルトの名無しさん
19/02/24 18:58:07.16 D1Rqo30U.net
つ MsgWaitForMultipleObjectEx
988:デフォルトの名無しさん
19/02/24 19:23:32.11 njB6xu8t.net
>>972
GetMessage相当が入ってるだけで基本WaitForと同じ動作だが何か?
989:デフォルトの名無しさん
19/02/24 22:10:09.80 SGjUOn7r.net
>>925
>WaitForSingleObjectやWaitForMultipleObjectsってspurious wakeupがあるから
>使うなと言ってる先輩がいるけど本当ですか?
嘘です。
同期オブジェクトを使いこなせない先輩が自分のバグを解決出来ずにこれを
spurious wakeupのせいにし、
同期オブジェクトをろくに知りもしない >>926-973 みたいなやつが適当なことを
書いているだけです。
990:デフォルトの名無しさん
19/02/24 23:25:34.04 N5G83Lpp.net
>>930
勇者がきてないのに目覚めてしまった魔王とか想像してほっこりした
991:デフォルトの名無しさん
19/02/25 22:30:45.76 M4I6EPLO.net
>>974
ってことは、Win環境においてはC++標準ライブラリを使う理由が無いってこと?
992:デフォルトの名無しさん
19/02/25 23:33:02.61 2LN6Bs/0.net
WaitFor~はOS制御の根幹って感じはするけど、lstrcpy~系をAPIにする意味はよく分からん
993:デフォルトの名無しさん
19/02/26 02:22:40.88 K9v1e6Ic.net
昔はCライブラリへのリンクなしでビルドする需要が割とあった。
994:デフォルトの名無しさん
19/02/26 12:16:11.37 5MxkS3P7.net
>>976
Windows では、Windows API か、それをクラスにまとめた、MFC を使う。
型も、HDC とか、Windows 独特のもの
C++標準ライブラリは、アルゴリズム以外は、あまり使わないだろ
995:デフォルトの名無しさん
19/02/26 12:23:22.51 D7AA7sgA.net
プラットフォーム共通にしたい場合なんかに使うと思うよ。
排他処理みたいな、OSに近いしい部分はOSに近しいAPIの方がいいと思うけどお。
996:デフォルトの名無しさん
19/02/26 16:48:18.20 K9v1e6Ic.net
vector,list,mapなど各種コンテナ、文字列クラスbasic_string、スマートポインタクラスshared_ptr,unique_ptrは使うでしょ。
コードでのdelete, delete[] 呼び出しを減らすためにね。
997:デフォルトの名無しさん
19/02/26 17:32:55.36 K9v1e6Ic.net
スマートポインタクラスshared_ptr,unique_ptrは、デストラクタを細かく指定できるのでHDCやHFONTなどにも使えるよ。
すでにMFCなどにラッパークラスがすでにあるから使わないだろうけど。
998:デフォルトの名無しさん
19/02/26 20:07:38.65 ZphJ05zo.net
昔はCRT依存しない実行ファイル作る意味もあったけど、C++が普通になったら
もうそこはこだわらないね。
999:デフォルトの名無しさん
19/02/26 20:15:04.12 gazg2F9T.net
>>980
プラットホーム不問にしなきゃいけないような有益なプログラムを書ける人なんてほぼいないだろ
boostライブラリみたいなものなら、プラットホーム固有のものを使っちゃいかないけど、あんなライブラリを書ける人なんて世界でも100人もいないだろ
1000:デフォルトの名無しさん
19/02/26 20:22:51.49 K9v1e6Ic.net
WindowsAPI直呼びを避ける動きは、主にゲーム業界からのニーズで発生するんだけどねぇ。
1001:デフォルトの名無しさん
19/02/26 23:03:56.44 D7AA7sgA.net
>>983
CRTに脆弱性があってから分離が当たり前になった気がするなあ
分離しておかないとパッチがあたらないし
1002:デフォルトの名無しさん
19/02/26 23:06:10.50 D7AA7sgA.net
>>984
今時のシステムはWindowsなのかLinuxなのか、上の人はコストしか見ないから
どっちでも行けるようにしておかないと下っ端は辛い状況になるよ。
外注に出す金があるならそんなみみっちいことは言われないわけで。
1003:デフォルトの名無しさん
19/02/26 23:39:30.91 K9v1e6Ic.net
>>986
ブラウン管ディスプレイのきじゃくせい(なぜか変換できない)なんてどうでもいいだろ。
1004:デフォルトの名無しさん
19/02/27 01:01:50.92 QPgoOUvU.net
strsafe.h
1005:デフォルトの名無しさん
19/02/27 03:28:19.50 32GlVML2.net
>>988
もしかして:ぜいじゃくせい
1006:デフォルトの名無しさん
19/02/27 07:27:37.75 5GOwcvUn.net
>>986
CRTに依存しないってのはstaticでもdynamicでも使わないって意味。昔はあったんだけどね。
1007:デフォルトの名無しさん
19/02/27 07:35:30.59 L5IXP2k2.net
>>990
お前すげーな、漢検でも持ってるのか?
って言われたいのかなぁw
1008:デフォルトの名無しさん
19/02/27 09:32:05.81 TPOAkFQ/.net
ネタをネタと
1009:デフォルトの名無しさん
19/02/27 09:44:25.02 TXzf+Z8H.net
申し訳ないが、心臓再同期療法の話はスレ違いなのでよそでやってくれ。
1010:デフォルトの名無しさん
19/02/27 15:18:35.62 Gg4oALq7.net
脆弱性という文字は脆弱性と読んでしまう脆弱性がある
次スレ
スレリンク(tech板)
1011:デフォルトの名無しさん
19/03/01 13:25:53.11 wtAGrKTy.net
\∧_ヘ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴ……!! ,,、,、,,,
/三√ ゚Д゚) / \____________ ,,、,、,,,
/三/| ゚U゚|\ ,,、,、,,, ,,、,、,,,
,,、,、,,, U (:::::::::::) ,,、,、,,,
//三/|三|\ ,,,, ,,、,、,,,
∪ ∪
,, , ,,,, ,,、,、,,, ,,、,、,,,
,,,,, ∧_∧ うまいモナー,,,,, 、 ,,,,,, ,,,,,,,, ,,,,,
,,, ( ´∀`)___,,,,___ ,, ∧_∧ ゲンキニ シテルカナ・・・___,,
/ ̄ ( つ日ヽ ∧_∧ ( ) /
/ (__)) (´∀` ) ( ) ∧_∧∧_∧ / マターリモナー
∧_∧∧_∧ドーゾ (日ノ ) | | | ( ´∀`) ´∀`)
( ´∀`) ´∀`) ((__) ,(_(_) (○)⊂ ) つ日⊂ ) モーナー
―(つ⊂ ) つ⊂ )――――――ヽ|〃(⌒)(⌒) (⌒)(⌒)
(⌒)(⌒) (⌒)(⌒)グーグー
1012:デフォルトの名無しさん
19/03/03 18:40:33.11 5EsDLzeQ.net
SendMessage(WM_CLOSE);
1013:デフォルトの名無しさん
19/03/03 18:41:27.12 5EsDLzeQ.net
SendMessage(WM_SYSCOMMAND, SC_CLOSE);
1014:デフォルトの名無しさん
19/03/03 18:42:26.83 5EsDLzeQ.net
PostQuitMessage(5963);
1015:デフォルトの名無しさん
19/03/03 18:44:07.75 5EsDLzeQ.net
TerminateProcess(hProcess, 5963);
1016:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 476日 23時間 21分 7秒
1017:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています