問題タブ [buffering]

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.

0 投票する
7 に答える
11447 参照

perl - "select((select(s),$|=1)[0])" は Perl で何をしますか?

Perl で書かれた恐ろしいコードを見たことがありますが、このコードの頭も尻尾もわかりません。

これは、サーバーとの通信に使用するネットワーク コードにあり、バッファリングと関係があると思います (設定されているため$|)。

selectしかし、複数の呼び出しや配列参照がある理由がわかりません。誰でも私を助けることができますか?

0 投票する
5 に答える
10957 参照

winapi - Win32: バッファリングせずにファイルに書き込みますか?

新しいファイル ハンドルを作成して、そのハンドルへの書き込み操作がすぐにディスクに書き込まれるようにする必要があります。

追加情報: ハンドルは子プロセスの継承された STDOUT になるため、そのプロセスからの出力をすぐにディスクに書き込む必要があります。

ドキュメントを調べるCreateFileと、FILE_FLAG_WRITE_THROUGHフラグは私が必要としているものとまったく同じように見えました:

書き込み操作は中間キャッシュを経由せず、ディスクに直接送信されます。

非常に基本的なテスト プログラムを作成しましたが、うまくいきません。CreateFile でフラグを使用WriteFile(myHandle,...)してから、長いループで使用し、約 15 秒で約 100 MB のデータを書き込みました。(私はいくつかのを追加しましたSleep())。

次に、エクスプローラーで「F5」を連続して押すことからなる専門的な監視環境をセットアップしました。結果: ファイルは 0kB のままで、テスト プログラムが終了する頃に 100MB にジャンプします。

次に試したのは、書き込みごとに手動でファイルをフラッシュすることでしたFlushFileBuffers(myHandle)。これにより、観測されたファイル サイズが期待どおりに安定して増加します。

私の質問は、ファイルを手動でフラッシュせずにFILE_FLAG_WRITE_THROUGHこれを行うべきではなかったのでしょうか? 何か不足していますか?「実際の」プログラムでは、ファイルをフラッシュできません。これは、ファイルを使用している子プロセスを制御できないためです。

FILE_FLAG_NO_BUFFERING同じ理由で使用できないというフラグもあります。ハンドルを使用しているプロセスを制御できないため、このフラグで必要な書き込みを手動で調整することはできません。

編集:ファイルのサイズがどのように変化するかを監視するための別のプロジェクトを作成しました。.NETFileSystemWatcherクラスを使用します。また、書き込むデータも少なくなり、合計で約 100kB になります。

これが出力です。タイムスタンプの秒を確認してください。

「組み込みのバッファなし」バージョン:

...そして「強制(手動)フラッシュ」バージョン(FlushFileBuffers()〜2.5秒ごとに呼び出されます):

0 投票する
4 に答える
11232 参照

c - なぜ printf() は sleep() の前に何も出力しないのですか?

私はカーニハンとリッチーの本で C を学んでいます。私は第 4 章 (「関数とプログラムの構造」) の基本にいます。先日、気になったsleep()のでこんな感じで使ってみました。

問題はプログラムの出力です。sleep()最初に を実行しprintf()てから . だから私は、プログラムが速すぎて、彼の仕事を私が望むように終わらせるsleep()ことができないのではないかと考えました。printf()

文字列を表示してからプログラムをスリープ状態にするにはどうすればよいですか? コンパイラは OpenBSD 4.3 の GCC 3.3.5 (propolice) です。

0 投票する
1 に答える
1456 参照

c# - C#を使用してWindows Media Playerで他のコンテンツを再生しながら、メディアコンテンツをバッファリングする

Windows Media Player が埋め込まれたフォームを持つアプリケーションを C# で開発しています。私のアプリにはオンライン コンテンツへのリンクがいくつかあります。ボタンをクリックするだけで、ユーザーがコンテンツを別のコンテンツに変更できるようにします。WMP は次のコンテンツのバッファリングに時間がかかるため、現在のコンテンツを引き続き再生したいと考えています。AXWindowsMediaPlayerクラスには、メディア プレーヤーがコンテンツのバッファリングを終了したときに通知する「Buffering」というイベントがあります。しかし、単一の AXWindowsMediaPlayer オブジェクトではこれを実現できませんでした。何をしても、2 番目のコンテンツをバッファリングしている間、最初のコンテンツを再生し続けることができませんでした。:(

何か案は?

前もって感謝します。

0 投票する
4 に答える
24483 参照

logging - stdout および stderr からバッファリングせずに make 出力をログに記録する方法

自動ビルドからの出力へのロギングに問題があります。

ビルドは Makefile と makefile ユーティリティを使用して行われます。

問題は、コンパイラ コマンド ラインのような通常の出力が stdout に送られ、コンパイル エラーが stderr に送られることです。

画面に表示されるように、ビルドから出力を取得したいと考えています。次のようなものです:

私が(kshスクリプトから)試したのは次のとおりです。

make -k > build.log 2> build.log

これにより単一のログ ファイルが作成されますが、ストリームがバッファリングされるため、ログ ファイルの結果がすべて混同されるという問題があります。

出力を 2 つの別々のログ ファイルにキャプチャすることはできましたが、それらを 1 つのログ ファイルにまとめる方法についての情報はありませんでした。

この場合、stdout と stderr のバッファリングをオフにする方法はありますか?

0 投票する
3 に答える
1806 参照

asp.net - ビデオ ストリーミング asp.net

私はASP Webサイトを作成しており、ユーザーにビデオをアップロードしてアップロードした後に表示する機能を提供しています。動画をサーバーにアップロードすることはできましたが、クライアントのページで動画を再生する方法がわかりません。ビデオをバッファリングしてユーザーのブラウザでストリーミングしたいのですが、再生する前にビデオ全体を待ってダウンロードしたくありません。どうすればアプローチできますか?

0 投票する
5 に答える
4266 参照

iphone - Core Graphics / Cocoaを使用して、バックグラウンドスレッドからビットマップコンテキストに描画できますか?

CGContextを使用して作成されたものにオフスクリーンで描画しCGBitmapContextCreate、後でそれを使用してを生成し、CGImageそれをCGBitmapContextCreateImageビューに描画しますdrawRect(その上に他のものも描画しています-これは、さまざまなレベルの変動性と複雑さを分離するための演習です)。

これはすべてメインスレッドで実行されている場合は正常に機能します。ただし、これをこのように分割する動機の1つは、オフスクリーン部分をバックグラウンドスレッドで実行できるようにすることでした(オンスクリーンコンテキストにレンダリングされないため、問題ないと思っていました)。

ただし、これを行うと、結果の画像は空になります。コードをチェックし、賢明なNSLogを配置して、すべてが正しい順序で行われていることを確認しました。

私の次のステップは、これを問題を再現する最も単純なコードに要約することです(または、不足している愚かなものを見つけて修正します)。その時点で、必要に応じてここに投稿するコードがあります。しかし、私は最初に、これで間違った道を進んでいないことをここで確認したかったのです。どちらの方法でも光を当てるグーグルスフィアの旅では何も見つかりませんでしたが、友人は、バックグラウンドスレッドで画像のサイズを変更しようとしたときに同様の問題が発生したと述べました。これは、ここに一般的な制限がある可能性があることを示唆しています。

[編集]

これまでの回答ありがとうございます。他に何もなければ、少なくとも私はこれに対する答えを持っていないのは私だけではない、と彼らは私に言った-それは私が知りたかったことの一部だった。この時点で、可能な限り単純な例を取得するために追加の作業を行い、コードまたは詳細情報が返される可能性があります。それまでの間、アイデアは今後も続けてください:-)

提起する1つのポイント: APIに関してスレッドセーフという用語を使用している人が何人かいます。このコンテキストでは、スレッドセーフには2つのタイプがあることに注意してください。

  1. API自体のスレッド性-つまり、複数のスレッドから使​​用できます(グローバル状態や、Cのstrtokなどの他の再入可能性の問題は、APIがスレッドセーフではない可能性がある一般的な理由です)。
  2. 個々の操作の親和性-複数のスレッドが、アプリケーションレベルのロックなしで、APIを介して同じオブジェクトやリソースと対話できますか?

これまでの言及は最初のタイプだったと思いますが、明確にしていただければ幸いです。

[編集2-解決しました!]

わかりました、私はそれをすべて機能させました。エグゼクティブサマリーは、問題はビットマップコンテキスト自体ではなく、私にあるということです。

バックグラウンドスレッドでは、ビットマップコンテキストに描画する直前に、他のオブジェクトの準備を行っていました。間接的に、一部のビューでsetNeedsDisplayが呼び出されることにつながる他のオブジェクトへの呼び出しが判明しました。それを行った部分をメインスレッドに分離することで、すべてが完全に機能するようになりました。

したがって、この質問に答えて、バックグラウンドスレッドのビットマップコンテキストに描画できるかどうか疑問に思っている人にとっては、答えはあなたです(ここと回答に示されている警告を使用して)。

皆さんありがとう

0 投票する
3 に答える
5134 参照

php - PHPで、サーバーに保存せずにs3ファイルをブラウザーにダウンロードしたい

AmazonのS3にファイルがあります。それらは一意のIDで名前が付けられているため、重複はありません。許可されたURLを使用してアクセスしています。それらをブラウザに渡すことができる必要がありますが、名前を変更する必要があります。現在、fopenを使用していますが、ファイルをブラウザに提供する前に、ファイルをサーバーにダウンロードしています。ファイルをサーバーからブラウザに「パススルー」させるにはどうすればよいですか?または、ダウンロードをバッファリングするにはどうすればよいですか?サーバーに小さなチャンクをダウンロードし、次のチャンクをダウンロードするときにそれをブラウザに渡しますか?

また、CloudFrontを本当に使用したいのですが、認証されたURLを提供していません。CURLを使用してリクエストのクレデンシャルを送信できると思います-CURLでこの種の「パススルー」ファイルを提供できますか?

ありがとう!