• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++ Thread::Sleep()について)

C++ Thread::Sleep()について

このQ&Aのポイント
  • C++のThread::Sleep()について質問です。
  • 処理中に画像が少し歪んでしまう現象が起きています。
  • Sleepを削除すると即座に次の処理に移行してしまうため、数秒停止させたいと考えていますが、方法がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

一つのイベント処理内にいるのにRunTickへ処理が移ることはないですよ その処理中に『Application::DoEvents()』を呼び出したりしていませんか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Threading.Thread.Sleep()の前後の処理

    初めて質問します。(VB2008始めたばかりの初心者です) 昔のBASICでwaitやdelay、sleepなどといったプログラムの実行を一時止めることの出来るコマンドがあったと思いますが、 VB2008上で同じようなことさせてラベルの色を一定時間で変化させたいと思い、色々調べて Threading.Thread.Sleep()  というものを見つけました。実際使ってみるとThreading.Thread.Sleep()の前に書いた処理がうまく動作しません。 (下記のような簡単なコードですが) Private Sub Buttonstart_Click(ByVal sender As System.Object,_ ByVal e As System.EventArgs) Handles Buttonstart.Click    Label1.BackColor = Color.White     Threading.Thread.Sleep(2000)     Label1.BackColor = Color.Blue End Sub スタートボタンを押せばlabel1が白色になり2秒後に青にしたいのですが白色にならずに2秒後にいきなり青になってしまいます。 とても初歩的な間違いをしていると思うのですが解決できません。恥ずかしいと思いながらも質問させていただきます。アドバイスをお願いします。

  • C# 簡単なシューティング 自機移動について

    かなりの初心者で困っています。 簡単なシューティングを作ろうとおもっています。 使用ソフトはVisualC#2005です。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //自機(右移動) private void button3_Click(object sender, EventArgs e) { if (timer1.Enabled == false) { timer2.Enabled = false; timer1.Enabled = true; } else { timer1.Enabled = false; timer3.Enabled = false; timer4.Enabled = false; } } private void timer1_Tick(object sender, EventArgs e) { pictureBox1.Left = pictureBox1.Left + 2; } //自機(左) private void button4_Click(object sender, EventArgs e) { if (timer2.Enabled == false) { timer1.Enabled = false; timer2.Enabled = true; } else { timer2.Enabled = false; timer3.Enabled = false; timer4.Enabled = false; } } private void timer2_Tick(object sender, EventArgs e) { pictureBox1.Left = pictureBox1.Left - 2; } //自機(上) private void button1_Click(object sender, EventArgs e) { if (timer3.Enabled == false) { timer4.Enabled = false; timer3.Enabled = true; } else { timer1.Enabled = false; timer2.Enabled = false; timer3.Enabled = false; } } private void timer3_Tick(object sender, EventArgs e) { pictureBox1.Top = pictureBox1.Top - 2; } //自機(下) private void button2_Click(object sender, EventArgs e) { if (timer4.Enabled == false) { timer3.Enabled = false; timer4.Enabled = true; } else { timer1.Enabled = false; timer2.Enabled = false; timer4.Enabled = false; } } private void timer4_Tick(object sender, EventArgs e) { pictureBox1.Top = pictureBox1.Top + 2; } } } 自機は画像(PictureBox)でボタンによって上下左右に移動します。 FormのSizeは800,630です。 自機の移動がボタンなのでキー入力によって操作できるようにしたいのですが、 それと、自機の移動範囲を画面からでないようにしたいです。 あまりC#を理解できてない上でつくったのでおかしな点が多々あると思います。 教えていただける方がいると助かります。

  • Thread.sleep()について(休止の対象は)。

    こんにちは。 Javaで、 Thread.sleep(duration);と書いた場合、 停止の対象となるスレッドは どうなるのでしょうか。 もし、sleep()がインスタンスから、 呼び出せるなら、thread(インスタンス).sllep() と書くことで、そのインスタンス(スレッドを 継承したクラス)を休止するので、 分かりやすいのですが、Thread.sleep()と 書くので、わかりずらいです。 以下のような、書き方に戸惑っています。 public class xx{ public static void main(String args){ while(1){ Thread.sleep(1000); System.out.println("abc"); } } } これは、 メインスレッドを対象としている、 と考えていいのでしょうか。 スレッドを継承したクラスで、 Thread.sleep()と書いたときは、 そのクラスを休止させる、 という理解で、いいのでしょうか。 何かアドバイスできる人がいましたら、 よろしくお願いします。

    • ベストアンサー
    • Java
  • Thread処理について、教えてください!

    はじめまして、いきなりですが質問させて頂きます。 sleep()メソッドは、Threadクラスのクラスメソッドであるため、 Thread.sleep();と書けば、main()メソッドの処理を一時停止できると 書いていました。 sleep();と書けば、Threadのrun()メソッドが一時停止するのはわかりますが、なぜ、sleep();にThread.を付けたらmain()メソッドが停止するのかわかりません。 なぜなのか、簡単に教えてください。

    • ベストアンサー
    • Java
  • スリープ中に割り込んで中止させたい

    VB2010で次の様なSleepを使ったプログラムなんですが途中で中断させることはできるでしょうか。 For I=1 to 100 System.Threading.Thread.Sleep(1000) Next

  • VC++2005のスレッド使用方法について

    現在、VC++2005 SP2にてDLLを作成しています。 DLLには一つスレッドがあり、開始関数が実行されれば、スレッドが起動。終了関数を実行すればスレッドを停止させたいと思っております。 関数を分けていますので、以下の内容をグローバルで宣言したいと考えています。 Thread^ oThread = gcnew Thread( gcnew ThreadStart( &CUart::ThreadProc ) );                                     ~~~~~~~~~~~~~~~~~~~~~~~~                                         実行関数です。 oThread->Start();  //開始関数のスレッド開始  oThread->Abort();  //終了関数のスレッド停止 現在、宣言をグローバルのところに配置して、ビルドすると エラー 1 error C3145: 'oThread' : グローバルまたは静的変数は、マネージ型 'System::Threading::Thread ^' を含むことはできません とエラーが発生してしまいます。 いろいろ調べましたが、なかなか進んでいない状態です。 使用方法が間違っているのでしょうか?申し訳ありませんが、教えてください。 もし、別の方法があればご教授願います。 よろしくお願いします。

  • Visual c# スレッド

    プログラム初心者です。 Visual c#にてスレッド関数を使ったプログラムを見よう見まねで 作りました。 スタートボタンを押すとピクチャーボックスの位置が 左から右へ移動し、ストップボタンを押すと止まる。 ピクチャーボックスの位置をテキストボックスに表示する。 というプログラムのつもりです。 デバックの状態でスタートボタンを押すとエラーメッセージが出て テキストボックスに位置を書き込むの関数のところが緑色にハイライトされます。エラーの内容は「有効でないスレッド間の操作」とありますが、どうしたら良いのか分かりません。 エラーの直し方を教えてください。 プログラムコードは以下です。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace bit_map_08._1._ { public partial class Form1 : Form { private Thread thread; static private int Position = 0; static private int i; static bool BtnOnFig; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { thread = new System.Threading.Thread(newSystem.Threading.ThreadStart(MainThread)); thread.Start(); } private void PointMove() { if (i < 300) { i = i + 1; Position = Position + i; textBox1.Text = Convert.ToString(Position); pictureBox1.Left = (Position); } if (i == 300) { i = 0; } } private void MainThread() { while( true ) { Thread.Sleep(100); if (BtnOnFig == true) { PointMove(); } } } private void button1_Click(object sender, EventArgs e) { BtnOnFig = true; } private void button2_Click(object sender, EventArgs e) { BtnOnFig = false; } } }

  • java Threadのsleepを途中で止める方

    今、訓練校に通っていて課題をだされていますが、どうもうまく行きませんのでお知恵を拝借したく思います。  java Threadのsleepを使用し、クイズの回答を10秒以内で答えるというものですが、 途中で入力をすると、次の問題の回答時間が異様に早くなり1秒ではなくなってしまいます。  こういう場合、入力をすれば、runメソッドが終わるというプログラムはどうやって書けばいいのか教えて頂きたく思います。 どうぞよろしくお願いいたします。 <下記、threadの部分だけですが、パッケージを使用するという課題のため無理やり使っています。> package pa; public class CountTest extends Thread { public void start() { super.start(); } public void run() { for (int i=10; i >= 1; i--) { try{ sleep(1000); System.out.print("⇒" ); }catch(InterruptedException e){} } System.out.println(""); for (int i=1; i >= 1; i--) { / } System.out.println("Time up "); System.out.println(""); System.out.println("1-4で答えを記入してください"); }

    • ベストアンサー
    • Java
  • C#での時間制限のプログラム

    C#初心者です。Visual studioでプログラムを書いてます。 ラベルに制限時間を表示させ、起動して30秒経つと 「もういちどやりますか?」というメッセージボックスが出て、 「はい」でもう一度開始、「いいえ」でプログラムを終了させるような 処理をさせたいのですが、「はい」を押しても同じメッセージボックスが出てループしてしまい、もう一度開始させることができません…。 解決する方法を教えていただきたいです。よろしくお願いします。 以下、書いたコードです。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace timelimit { public partial class Form1 : Form { public Form1() { InitializeComponent(); } DateTime StartTime; TimeSpan TimeLimit; private void Form1_Load(object sender, EventArgs e) { timer1.Enabled = true; StartTime = DateTime.Now; TimeLimit = new TimeSpan(0,0,30); } private void timer1_Tick(object sender, EventArgs e) { TimeSpan tm = DateTime.Now - StartTime; if(tm > TimeLimit) { TimeLimit = new TimeSpan(0, 0, 30); timer1.Enabled = false; DialogResult result = MessageBox.Show ("時間終了!もういちどやりますか?","終了処理",MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { timer1.Enabled = true; } else if (result == DialogResult.No) { Close(); } }else{ label1.Text = (TimeLimit - tm).ToString(); } }

  • .Net Compact でのダブルバッファリング

    .Net Comapct Frameworkを利用してのC#プログラミングで、 ダブルバッファリングを利用して画面を描画しようとしていますが、 ちらつきが解消されません。 どこがおかしいかご指摘いただけると幸いです。 【環境】 Visual Studio 2005 C# .Net Compact Framework 2.0 【コード(抜粋)】 public partial class Form1 : Form { private Bitmap m_offScr; // オフスクリーンイメージ private Graphics m_offG; // オフスクリーングラフィックス private System.Windows.Forms.Timer timer1; public Form1() { this.timer1.Enabled = true; this.timer1.Interval = 1000; this.timer1.Tick += new System.EventHandler(this.timer1_Tick); ~略~ this.m_offScr = new Bitmap(400, 200); this.m_offG = Graphics.FromImage(this.m_offScr); } private void Form1_Paint(object sender, PaintEventArgs e) { m_offG.FillRectangle(new SolidBrush(Color.Red), 10, 10, 100, 100); e.Graphics.DrawImage(this.m_offScr, 0, 0); } // イベントハンドラ private void timer1_Tick(object sender, EventArgs e) { // 秒の更新 this.Refresh(); } } よろしくお願いいたします。