問題タブ [beginthreadex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - DirectShow - 新しいスレッドを作成できません
DirectShow グラフを既存のアプリケーションに統合する際に奇妙な問題が発生しています。
最初にカバーするいくつかのこと:
- グラフの目的は、公開された DirectShow インターフェイスを持つ FrameGrabber から生のビデオを取得することです。グラフは、VMR9 を介してビデオを表示する権利を取得し、生のフレームを ISampleGrabber を介していくつかのアルゴリズムに公開します (DirectShow の例)。
- グラフは、個々のプロジェクトで正常に作成および実行されました。ビデオは正常に表示され、すべてが満足しています。
これを既存のコードに統合するときに問題が発生します。アプリケーションの初期化から、まずグラフを作成して開始し、ウィンドウレス モードで VMR9 を実行します。初期化の後半で、_beginthreadex を介していくつかのワーカー スレッドを作成します。_beginthreadex の呼び出しは、グラフが作成されて実行された場合にのみ、戻りコード 12 (メモリ不足) で失敗します。
明らかな答えは、メモリが不足しているか、他のリソースが不足しているということです。ただし、スレッドが開始しようとしている時点で、2 GB のシステム メモリのうち約 420 MB を使用しています。スレッド スタック サイズは明示的に 1MB に設定されています。だから、私が知る限り、私は記憶がありません。さらに、実行中のアプリケーションには合計 15 のスレッドがあるため、私は不合理な量を作成していません。
DirectShow で同様の問題を経験した人はいますか? 私は何らかの情報を探しています。この問題のデバッグにかなりの時間を費やしてきましたが、うまくいきませんでした。
ほとんどの DirectShow グラフではコードが長くなるため、必要なコードを投稿します。
編集
要求通り。DirectShow コードのどの部分がスレッドの起動に失敗する原因なのかはわかりません。ただし、グラフをビルドするだけで実行しない場合、スレッドは問題なく動作します。したがって、実行呼び出しの後に失敗が発生すると思います。グラフを実行する私のコードは次のとおりです。
SetVMRSize 関数は、VMR をその親ウィンドウに合わせてサイズ変更するだけです。
注目すべきは、pWindowControllerIVMRWindowlessControl9
と pMediaControl です。IMediaControl
編集 2
__beginthreadex の代わりに CreateThread を使用してコードをテストしました。スレッドの起動に失敗した後、GetLastError() は次を返します。
8 : このコマンドを処理するのに十分なストレージがありません。
スレッドを作成するコードは次のようになります。
CreateThread のパラメーターの一部:
c++ - Boost :: shared_ptrをWindowsスレッド関数へのポインターとして渡すにはどうすればよいですか?
Boost :: shared_ptrをWindowsスレッド関数へのポインターとして渡すにはどうすればよいですか?次のコードを想定します:
このコードは間違っていると思いますが、あなたの考えは何ですか?これどうやってするの ?
編集:私はboost::weak_ptrによって私の問題を解決しました。このページで自分の答えを確認してください
c++ - マルチスレッドメンバー関数を持つクラス
メンバー関数の一部を別のスレッドで実行するように変換しようとしているクラスがあります。プログラムは問題なく準拠していますが、イメージバッファ(別のスレッドによって更新されます)から読み取ろうとするとクラッシュします。この問題は、_beginthreadで引数が正しく渡されなかったことが原因のようです。
次のコードスニペットは、私がやろうとしていることをより明確に説明しているはずです。基本的に私が達成しようとしているのは、プログラムの残りの部分が同じ画像バッファを同時に読み取るなど、他のことをしている間に、メンバー関数「fillBuffer」に画像バッファを埋めさせることです。
構文に関するヘルプは大歓迎です。
c++ - C ++:_beginthreadex、スレッド関数名がVisualStudioの[スレッド]ウィンドウに表示されない
::_beginthreadex()
最近、それが常により好ましいことを知った::CreateThread()
ので、を使用するすべての呼び出しを変更し::CreateThread()
ました。
唯一の欠点は、Visual StudioのThreads
ウィンドウにスレッド関数の名前が表示されなくなり、スレッドをすばやく識別しにくくなることです。これは、使用したときにデバッガーによって自動的に行われたと思い::CreateThread()
ます。パラメーターがまったく同じであるため、使用する関数の名前を変更しただけです。
Visual Studio::_beginthreadex()
のウィンドウでスレッドの名前を使い続けて表示する方法はありますか?Threads
c++ - _beginthreadex()が成功した直後にCloseHandle()を呼び出すことはできますか?
から返されたハンドルを使用することに興味がありません_beginthreadex()
。CloseHandle()
すぐに呼び出すのは安全ですか?
これは、メモリリークを回避するために行う必要があると思います。
c++ - _beginthreadex を使用して C++ プログラムをコンパイルできない
そのプログラムを実行できません。このエラーが表示されますが、理解できません:
エラー 1 エラー C2664: '_beginthreadex': パラメーター 3 を 'unsigned int (__stdcall *)(void)' から 'unsigned int (__stdcall *)(void *)'32 に変換できません
解決策を見つけるために Web を 1 時間以上検索しました。
c++ - _beginthreadex は「オーバーロードされた関数」から変換できません
そのため、別のウィンドウに重ねられたテキストを印刷する関数を作成していましたが、それを別のスレッドにして、ユーザーを開いたままにして表示するテキストのタイマーを実行してプログラムを使用できるようにしたかったのです。ただし、コンパイルすると、次のエラーが発生します。
メインの cpp ファイルは次のとおりです。
Trial.h のヘッダー ファイルは次のとおりです。
複数の例を調べ、構文をチェックし、_beginthreadex を台無しにしていないことを確認しましたが、問題の原因を見つけることができないようです :|
c++ - _beginthreadex での引数の型のエラー
ヘッダー ファイルにあるスレッドを定義するには:
次に、私のcppファイルには次のものがあります。
そして、私が使用するこのスレッドを呼び出すために
しかし、私は次のことを&PerformLogin
言っていることに誤りがあります:
タイプ unsigned int (__stdcall HttpClient:: )(void ) の引数は、パラメーター unsigned int (__stdcall*)(void*) と互換性がありません。
エラーは理解できますが、これを修正する方法が本当にわかりません!
c++ - 複数のパラメーターを _beginThreadEx に渡す
複数のパラメーターを beginthreadex に渡すことは可能ですか?
クラスまたは構造体を作成できることはわかっていますが、クラスまたは構造体に結合したくない無関係なデータの断片がある場合はどうすればよいでしょうか?
ブースト ライブラリでは複数のパラメーターが許可されているようですが、標準の c++ _beginThreadEx で複数のパラメーターを使用するにはどうすればよいですか?
parameters - structを_beginThreadEx()関数に渡すと、意図しない出力が生成されます
複数のパラメーターを_beginThreadEx関数に渡す「適切な」方法を学習しようとしています。いくつかの助けを使うことができます。
関数myThread内。
* x-> valueの出力に1、3、または5を追加し続けます
また...私が置くなら
前
Hello Worldが出力されない場合があるので、代わりに上記の行の後に配置します。