問題タブ [beginthread]
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++ - Visual C++ スレッドの簡単な例
関数を _beginthread に渡して、メインから基本的なスレッドを作成しようとしています。しかし、私の出力は完了していません。
次の出力が得られます。
誰かが次のコードで何が間違っているかを明確にしてもらえますか?
c++ - C++/Winforms スレッド: _beginthread でビルド エラーが発生する
スレッドと Winforms/C++ は初めてです。ボタンを押したときに新しいスレッドで関数を開始したいと思います。スレッドのチュートリアルとしてこれに従っていました。そのサイトにあるサンプル コードを別の VC++ プロジェクトでビルドすると、ビルドは成功します。
ただし、C++/Winforms で次の操作を行うと、ビルドが完了せず、ビルド エラーが発生します。
ここで何が欠けていますか?
ヘルプ!
コード:
ビルド エラー:
c++ - スレッド (_beginthreadex) winsock (受け入れる)
Winsock 非ブロッキング オブジェクトを作成したい これは私のコードです
主な機能:
サーバー.h:
通常、クライアント接続がない場合、関数の受け入れは一時停止しますが、_beginthread または _beginthreadex 関数を使用すると一時停止しません。
に
受け入れると一時停止します
c++ - マルチスレッド時の関数へのパラメーターの受け渡し
Frogger のようなゲームを作成する割り当てがあります (ご存知のように、カエルが通りを渡らなければならないゲームです)。これまでのところ、カエルと車の動きの背後にあるロジックを作成しましたが、プロセスを同時に実行することはできないようです. マルチスレッドがこれを行う正しい方法であることはわかっていますが、_beginthread を介してパラメーターを渡す際に問題が発生しています。
これが私がこれまでに持っているものです:
したがって、誰かがこの機能を実現する正しい方法を教えてくれれば、本当に感謝しています。前もって感謝します : ]
c++ - パラメータを _beginthread 関数に渡す
新しいスレッドを開始する次のコードがあります
機能は次のとおりです。
エラーが表示されます:
そのため、int 型の新しいパラメーターを定義し、それを ModbusReadWrite() 関数に渡す必要があります。どうすれば達成できますか?
c++ - shared_ptr のデストラクタの問題、引数として新しいスレッドに渡される
shared_ptr
toを含む params 構造体std::deque
を関数の入力引数として渡します。これは新しいスレッドで機能します。この両端キューは、パブリック フィールドとして外部オブジェクトに作成されます。そして、shared_ptr をparams
構造体に保存すると、shared_ptr の参照数が増加し、すべて問題ないようです。
スレッドに関しては、呼び出し_beginthread()
関数を使用して作成されます。スレッド内で、shared_ptr が指すいくつかの値を deque にプッシュします。これらの値は外部オブジェクトで正しくポップされるため、すべてが再び問題ないように見えます。
スレッドが作業を終了すると、params 構造体がヒープから削除され、ref カウンターが減少します (すべて問題ありません)。しかし、この shared_ptr が作成された外部オブジェクトのデストラクタが呼び出されると、refs カウンターがデクリメントされて 0 になるため、実際にポイントされたオブジェクトのデストラクタが呼び出され、デバッグ アサーション エラーが表示されます。失敗した式は _pFirstBlock == pHead (二重削除?) です。しかし、VS2012 のデータ ブレークポイントの助けを借りて確認しました。そのアドレスは、shared_ptr._Rep._Uses
上記の瞬間にのみアクセスされます。
もう 1 つ注意: この両端キューに何もプッシュされない場合、すべてのデストラクタが正常に実行されます。私が間違っていることは何ですか?
shared_ptr の作成:
スレッド パラメータ構造:
スレッドの作成:
スレッド機能:
visual-studio-2010 - 初級 Visual C++ の問題: パラメータ 1 を 'void (__cdecl *)(void *)' から 'void (__cdecl *)(void *)' に変換できません
つまり、私は主に Linux プログラマーで、最近 Windows を扱う仕事に就きました。いくつかの数値コードを作成しましたが、簡単な GUI を配置する必要があります。
現時点では、数値的なものを開始するonClick
という関数を呼び出すイベントを持つボタンがあります。しかし、これにより GUI がフリーズするため、呼び出しをワーカー スレッドstart
に入れたいと考えています。start
私はstart
次のように宣言しました: void __cdecl start(void* args)
. __cdec1
以前にエラーが発生していたので、 を追加しました: error C2664: '_beginthread' : cannot convert parameter 1 from 'void (__clrcall *)(void *)' to 'void (__cdecl *)(void *)'
。
ボタンをクリックすると、次のコードが実行されます。
これにより、紛らわしいエラーが発生しますcannot convert parameter 1 from 'void (__cdecl *)(void *)' to 'void (__cdecl *)(void *)'
。
誰かが私が間違っているところを見ることができれば、私は永遠に感謝します.
c++ - 8 コア CPU で 8 スレッドを起動しても CPU 負荷が 100% にならない
単純なキー生成の例でマルチスレッドを使用する方法を学んでいます。キーの 1 つをインクリメントして元のキーと比較するハッシュキー マッチング アルゴリズムを実装しました。2 つのハッシュキーが一致すると停止します。したがって、0xffffffffff の異なるハッシュキーを反復処理して一致を見つける必要があります。このトピックに関するいくつかの msdn を読み、同じ一致する for ループの 8 つのスレッドを、thread_number_offset で開始し、各反復を number_of_threads ずつインクリメントして開始することにしました。スターターコードは次のとおりです。
forループを使用した関数は次のとおりです。
すべて問題ありませんが、タスク マネージャー ウィンドウの CPU 負荷は 10 ~ 15% を超えません。また、すべてのコアが実際にロードされるわけではありません。コア 0、2、4、6 はビジーですが、1、3、5、7 はビジーです。CPUコアの最大数で一定の反復を行うと、CPUがすぐにフル機能でロードされるはずだと思いました。なぜそれが起こっているのですか?私がやったことよりもはるかに複雑ですか?