問題タブ [c++]
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++ - z/OS 上の C++ で C ソケット API を使用する方法
z/OS 上の C++ で C ソケット API を正しく動作させるのに問題があります。
を含めていますが、まだ定義されていないsys/socket.h
ことを示すコンパイル時エラーが発生します。AF_INET
明らかな何かが欠けているのでしょうか、それとも z/OS 上にあることが問題をより複雑にしているという事実に関係していますか?
#ifdef
私が打っているがあることを発見しました。どうやら、使用しているソケットの「タイプ」を定義しない限り、z/OS は満足していないようです。
個人的には、これ_OE_SOCKETS
が実際に何のためにあるのかわからないので、z/OS ソケット プログラマーがそこにいる場合 (3 人全員)、これがどのように機能するかの概要を教えていただけますか?
アプリのテスト
コンパイル/リンク出力:
sys/sockets.h のチェックには必要な定義が含まれており、私が知る限り、どの#ifdef
ステートメントによってもブロックされていません。
ただし、次のものが含まれていることに気付きました。
基本的にファイル全体をカプセル化するのはどれですか? それが重要かどうかはわかりません。
c++ - BerkeleyDBの同時実行性
- BerkeleyDBのC++実装が合理的にサポートできる最適な同時実行レベルはどれくらいですか?
- リソースの競合が原因でスループットが低下し始める前に、DBでいくつのスレッドを叩きのめすことができますか?
マニュアルを読み、ロックの数、ロッカー、データベースのページサイズなどを設定する方法を知っていますが、BDBの同時実行の実際の経験がある人からアドバイスをお願いします。
私のアプリケーションは非常にシンプルです。それぞれ約1KBのレコードの取得と書き込みを行います。カーソルも削除もありません。
c++ - この場合、ネストされたクラスを使用する必要がありますか?
ビデオの再生と記録に使用されるクラスのコレクションに取り組んでいます。play()
、stop()
、などのメソッドを使用して、パブリック インターフェイスのように機能する 1 つのメイン クラスがあります。次にpause()
、record()
ビデオのデコードとビデオのエンコードを行う主力クラスがあります。
C++ にネストされたクラスが存在することを知ったばかりで、プログラマーがそれらを使用することについてどう考えているか知りたいです。私は少し警戒しており、利点/欠点が何であるかはよくわかりませんが、(私が読んでいる本によると)私のような場合に使用されるようです.
この本は、私のようなシナリオでは、クライアントが使用することを意図していないクラス用の個別のファイルがないように、インターフェイスクラス内に主力クラスをネストすること、および可能性のある名前の競合を回避することが良い解決策であることを示唆しています? これらの正当化についてはわかりません。ネストされたクラスは、私にとって新しい概念です。プログラマーがこの問題についてどう思うか知りたいだけです。
c# - 堅牢な乱数生成
特別なハードウェアを使用せずに、パフォーマンスが高く、適度に堅牢な RNG を探しています。数学的手法 (Mersenne Twister など) を使用したり、マシンから「エントロピーを収集」したりできます。Linux/etc では、drand48()
48 のランダム ビットを生成する があります。32 ビットを超えるランダム性を生成でき、下位ビットが上位ビットと同じくらいランダムである、C++ または C# 用の同様の関数/クラスが必要です。
暗号的に安全である必要はありませんが、C 言語rand()
または .NETを使用したり、それらに基づいたりしてはなりませんSystem.Random
。
ソースコード、ソースへのリンクなどをいただければ幸いです。それができない場合、どのタイプの RNG を探す必要がありますか?
c++ - Visual Studio 2005 を使用して Windows NT 4.0 用にビルドしますか?
移行しようとしている MFC アプリケーションが を使用しているため、設定afxext.h
が発生_AFXDLL
し、設定すると次のエラーが発生します/MT
。
_AFXDLL ビルドには /MD スイッチを使用してください
これまでの調査によると、Visual Studio (この場合は C++) 2005 を使用して、Windows NT 4.0 で実行するアプリケーションを構築することは不可能です。
これは本当ですか?利用可能な回避策はありますか?
c++ - C++ での使いやすい正規表現のサポート?
プラットフォーム非依存または Windows 固有の、ネイティブ C++ 用の堅牢で使いやすい正規表現エバリュエーターを探しています。
要件:
- Boost または ACE 正規表現ライブラリを使用できません (残念ながら)
- .NET Regex (またはマネージ コード) を使用できない
主な要件は、スタンドアロンでオープンであることです。
c++ - Win32 でのヒープの破損。見つける方法は?
ヒープを破損しているマルチスレッドC++ アプリケーションで作業しています。この破損を特定するための通常のツールは適用できないようです。ソース コードの古いビルド (18 か月前) は最新のリリースと同じ動作を示します。欠点としては、ソース デルタを使用して、バグがいつ導入されたかを特定できません。リポジトリには多くのコード変更があります。
クラッシュ動作のプロンプトは、このシステムでスループットを生成することです。つまり、内部表現に変更されたデータのソケット転送です。アプリに定期的に例外を発生させる一連のテスト データがあります (さまざまな場所、さまざまな原因 - ヒープ割り当ての失敗など: ヒープの破損)。
この動作は、CPU パワーまたはメモリ帯域幅に関連しているようです。マシンのそれぞれが多ければ多いほど、クラッシュしやすくなります。ハイパースレッディング コアまたはデュアルコア コアを無効にすると、破損の割合が減少します (ただし、完全にはなくなりません)。これは、タイミング関連の問題を示唆しています。
問題は次のとおりです:
軽量のデバッグ環境 (たとえばVisual Studio 98 / AKA MSVC6
) で実行すると、ヒープの破損はかなり簡単に再現できますalloc;
。洗練されたデバッグ環境 (Rational Purify、VS2008/MSVC9
または Microsoft Application Verifier でさえ) システムはメモリ速度の制約を受け、クラッシュしません (メモリの制約: CPU が を超えていない50%
、ディスク ライトが点灯していない、プログラムが可能な限り高速に動作している、ボックスが1.3G
2G の RAM を消費している) . したがって、問題を再現できる (ただし原因は特定できない) か、原因または再現できない問題を特定できるかの選択肢があります。
次の場所に関する私の現在の最良の推測は次のとおりです。
- 非常に汚れたボックスを取得します (現在の開発ボックスを置き換えるには: 2Gb RAM に
E6550 Core2 Duo
); これにより、強力なデバッグ環境での実行時に誤動作を引き起こすクラッシュを再現できるようになります。また - 演算子
new
andを書き換えて、 anddelete
を使用し、使用が終了したらすぐにメモリを読み取り専用としてマークします。実行して、解放されたメモリに書き込んでいる悪者を OS に捕まえさせます。はい、これは絶望のしるしです。一体誰が書き直しているのですか?! これにより、Purify などと同じくらい遅くなるのだろうか。VirtualAlloc
VirtualProtect
MSVC6
new
delete
いいえ、Purify インスツルメンテーションを組み込んで出荷することはできません。
同僚がちょうど通り過ぎて、「スタック オーバーフローですか? 今、スタック オーバーフローが発生していますか?!?」と尋ねました。
そして今、質問:ヒープ破損者を見つけるにはどうすればよいですか?
更新: バランスが取れてnew[]
おりdelete[]
、問題の解決に向けて長い道のりを歩んでいるようです. アプリがクラッシュするまでに 15 分ではなく、約 2 時間かかるようになりました。まだありません。さらに提案はありますか?ヒープの破損が続く。
更新: Visual Studio 2008 でのリリース ビルドは劇的に優れているようです。現在の疑惑は、にSTL
付属する実装にかかっていVS98
ます。
- 問題を再現します。
Dr Watson
さらなる分析に役立つ可能性のあるダンプが生成されます。
私はそれをメモしておきますが、ワトソン博士がつまずくのは事後であって、ヒープが踏みつけられたときではないことを懸念しています.
別の試み
WinDebug
は、非常に強力であると同時に軽量でもあるデバッグツールとして使用することです。
現時点では、これもうまくいきました。何かがうまくいかない限り、あまり助けにはなりません。行為中の荒らしを捕まえたい。
おそらく、これらのツールを使用すると、少なくとも問題を特定のコンポーネントに絞り込むことができます。
私はあまり希望を持っていませんが、絶望的な時代が求められています...
また、プロジェクトのすべてのコンポーネントが正しいランタイム ライブラリ設定 (
C/C++ tab
VS 6.0 プロジェクト設定のコード生成カテゴリ) を持っていることを確認しますか?
いいえ、そうではありません。明日、ワークスペース (58 個のプロジェクト) を調べて、それらがすべてコンパイルされ、適切なフラグでリンクされていることを確認するのに数時間を費やします。
更新: これには 30 秒かかりました。ダイアログですべてのプロジェクトを選択し
Settings
、適切な設定を持たないプロジェクトが見つかるまで選択を解除します (それらはすべて適切な設定を持っていました)。
c++ - 例外が常にキャッチされるようにする
C++ の例外は、呼び出し元の関数でキャッチする必要はありません (コンパイル時のエラーはありません)。そのため、(Java とは異なり) try/catch を使用してそれらをキャッチするかどうかは、開発者の判断に任されています。
呼び出し元の関数が try/catch を使用して、スローされた例外が常にキャッチされるようにする方法はありますか?
c# - 同じオープンソケットを介した非同期多方向サーバークライアント通信?
クライアントがWindowsMobile6デバイス上にあり、C ++で記述されており、サーバーが完全なWindows上にあり、C#で記述されているクライアントサーバーアプリがあります。
もともと、私はクライアントからサーバーにメッセージを送信するためだけにそれを必要としていましたが、サーバーはメッセージを受信したという確認応答を返すだけでした。ここで、サーバーが実際にクライアントにメッセージを送信してデータを要求できるように更新したいと思います。現在、クライアントがサーバーにデータを送信した後にのみ受信モードになるように設定しているため、サーバーがいつでも要求を送信することはできません。クライアントデータを待たなければなりません。私の最初の考えは、サーバーがクライアントに関してすでに持っているのと同じように、サーバー要求をリッスンして、別の開いたソケットを使用してクライアント上に別のスレッドを作成することです。同じスレッド内で同じソケットを使用して、すべてのサーバーにいつでもリクエストを送信する方法はありますか?
何かを使用しWaitForMultipleObjects()
て、受信バッファーと、送信するデータがあることを通知するイベントを渡すことができますか?
c++ - C++でのCPUスロットリング
集中的な計算を行う特定のスレッドの最大CPU負荷を設定するための洗練された方法があるかどうか疑問に思っていました。
現在、スレッド内で最も時間のかかるループ(圧縮のみを実行)を見つけて、ハードコードされた値で使用GetTickCount()
しSleep()
ています。ループが特定の期間継続し、その後特定の最小時間スリープすることを確認します。それは多かれ少なかれ仕事をします、すなわちスレッドがCPUの50%以上を使用しないことを保証します。
ただし、動作はCPUコアの数(大きな欠点)と単純に醜い(小さな欠点:))に依存します。
何か案は?