• ベストアンサー

SetTimer関数について

επιστημη(@episteme)の回答

回答No.2

リアルタイムOSじゃないんだから、 できたとしても十分な精度が確保できんでしょうね。

関連するQ&A

  • SetTimer関数について。

    プログラム初心者です。質問させてください! 現在私はWin32APIを用いて、簡単なプログラムを作成しています。 そこで例えばイベントAが起きた10秒後にあるアクション(1)をさせたくて、 WM_イベントAの時: SetTimer(hWnd,ID_MYTIMER1, 10000, NULL); というようにプログラムを書きました。 そのSetTimer関数が実行されることより、 WM_TIMER:イベントが発生するので、WM_TIMER:イベントのところにあるアクション(1)をさせるプログラムを書きました。 しかし、イベントAが起きた100秒後には、あるアクション(1)とは違うあるアクション(2)をさせたいのですが、 この場合、WM_イベントAが起きたときに、 SetTimer(hWnd,ID_MYTIMER1, 10000, NULL); SetTimer(hWnd,ID_MYTIMER2, 100000, NULL); のようにプログラムをかいてしまうと、 二つともWM_TIMERイベントがおこるので、 あるアクション(1)も(2)も100秒後には実行されてしまいます。 100秒後にはアクション(1)はおこらず、アクション(2)だけおこる。 10秒後にはアクション(2)はおこらず、アクション(1)だけおこる。 このようにするには、どのようにすればいいのでしょうか? アドバイスよろしくお願いいたします。

  • SetTimer関数について

    Visual C++でSetTimer関数を使用しています。 もしSetTimer関数で戻り値が帰ってこなかった場合どうなるのでしょうか?

  • [MFC] SetTimer関数の扱い方について

    [MFC] SetTimer関数の扱い方について MFCを扱い始めた初心者です。Settimerを用いて1秒間隔でOnTimer関数を呼び出そうと思い試行錯誤していたのですが、どのように記述してよいのかを教えてください。 実装したい機能は、ボタン1によりタイマを開始し、OnTimer関数を1秒間隔で呼び出し、ボタン2によりその動作を停止させたいのです。以下のコードを記述しますので、ご説明をよろしくお願いします。 NForm(){  btnの定義; btn2の定義; Picutureboxのpboxの定義; } int __stdcall WinMain(HINSTANCE,HINSTANCE,LPSTR,int) { Application::Run(new NForm()); return 0; } void NForm::btn_Click(Object *sender, System::EventArgs *e) { if(sender->Equals(btn)){ setTimer(1, 1000, NULL); } else if(sender->Equals(btn2)){ setTimer(1, 1000, NULL); } } void NForm::onTimer(UINT nIDEvent) { if(nIDEvent == 1){ HDC hDC; hDC = GetDC(NULL);//Full screen capture HDC hMemDC = CreateCompatibleDC(hDC); RECT r; SIZE size; size.cx = GetSystemMetrics(SM_CXSCREEN); size.cy = GetSystemMetrics(SM_CYSCREEN); HBITMAP hBitmap = CreateCompatibleBitmap(hDC, size.cx, size.cy); if (hBitmap) { HBITMAP hOld = (HBITMAP) SelectObject(hMemDC, hBitmap); BitBlt(hMemDC, 0, 0, size.cx, size.cy, hDC, 0, 0, SRCCOPY); SelectObject(hMemDC, hOld); DeleteDC(hMemDC); ReleaseDC(NULL, hDC); pbox->Image = Image::FromHbitmap(hBitmap); DeleteObject(hBitmap); } capture_cnt++; char name[80]; sprintf(name, "capture_%d.jpg", capture_cnt); pbox->Image->Save(name,Drawing::Imaging::ImageFormat::Jpeg); NForm::onTimer(1); } else if(nIDEvent == 0){ NForm::onTimer(0); } } 上記のコードにおいて、Ontimer関数を単体で動作させた場合はきちんと動作します。 どうか、よろしくお願いします。

  • ビットマップ表示とSetTimer関数を同居させる方法

    ビットマップ表示とSetTimer関数を同居させる方法 現在、vc++2005を使用して、簡易的なGUIアプリケーションを作成しようとしているのですが、自分では解決ができない問題が発生してしまったので、質問させていただきます。 それはビットマップ表示とSetTimer関数を同居させる方法についてです。 ビットマップを読み込んで表示させる機能を追加してから、SetTimer関数が反応しなくなってしまい困っています。 ちなみにビットマップ表示の機能を追加する前まではSetTimer関数が正常に機能していました。 ウィンドウのハンドルhWndが何か関係しているのかと思ったのですが、解決方法がわからず・・・・・・ ご存知の方がいらっしゃましたら御教授いただけると幸いです。 ↓ ソースの一部です case WM_CREATE: //ビットマップファイル読み込み + 表示の準備 static HBITMAP hbitmap,prebitmap; static HDC hDC, hcomDC;      hbitmap = (HBITMAP)LoadImage(NULL,_T("kouen.bmp"),IMAGE_BITMAP,0,0, LR_LOADFROMFILE); if( hbitmap == NULL ) { MessageBox(hWnd, _T("ビットマップのロードに失敗しました"), _T("エラー"),MB_OK | MB_ICONWARNING); return 0; } hDC =GetDC(hWnd); hcomDC =CreateCompatibleDC(hDC); prebitmap= (HBITMAP)SelectObject(hcomDC,hbitmap);            (中略) break;                     case WM_LBUTTONDOWN: //2連続のシングルクリック防止 EnableWindow(hWnd,FALSE); SetTimer(hWnd, ID_TIMER1, 500, NULL); ← これが機能していない          (中略) break; case WM_PAINT: BitBlt( hDC, 0, 0, 1024, 690, hcomDC, 0, 0, SRCCOPY ); break; case WM_TIMER://機能しなくなってしまった部分 if(wParam==ID_TIMER1){ KillTimer(hWnd,ID_TIMER1); EnableWindow(hWnd,TRUE); }

  • TimerProc コールバック関数を利用する方法

    タイマを使いたくてメッセージマップでOnTimerを追加しましたが、 CWnd::SetTimerの第3パラメタに何を設定したらよいかわかりません。 lpfnTimer WM_TIMER メッセージを処理するためのアプリケーションが用意した、 TimerProc コールバック関数のアドレスを指定します。 このパラメータが NULL の場合は、WM_TIMER メッセージはアプリケーションの メッセージ キューに置かれ、CWnd オブジェクトによって処理されます。 とあり、NULL指定のサンプルはあるのですが、 「TimerProcコールバック関数のアドレスを指定する法」を試したいのです。 関数のアドレスというのが何をいっているのか理解できないのですが 試しに void CXXXCtrl::method1() { SetTimer(timerID, 10000, &OnTimer); } void CXXXCtrl::OnTimer(UINT nIDEvent) { // 処理 COleControl::OnTimer(nIDEvent); } としたところ error C2276: '&' : 仮想関数のアドレスを取ろうとしました。 のエラーになってしまいます。

  • 超初心者の質問です。今、MFCでプログラムを作成しています。問題は、O

    超初心者の質問です。今、MFCでプログラムを作成しています。問題は、OnTimer関数が呼ばれないことです。 Cxxxsocket::test (){ (CMainFrame *)afxGetMainWnd()->SetTimer(1, 100, Null); } CxxxsocketはCsocketのクラスでSetTimerおよびOnTimerは使えません。この関数でSetTimerを呼び出したい。 afxGetMainWnd()はアプリケーションのアクティブなメイン ウィンドウへのポインタをさしており、恐らくCFrameWndのCMainFrame もしくは、CWinAPPのCxxxAppのポインタをさしていると思います。CFrameWndの場合、OnTimerが定義されているので、SetTimerのイベントは本OnTimerにて処理されると考えていたのですが、全くOnTimerがCallされません。 CMainFrameで利用しているOnTimerを使いたいのですが、SetTimerの呼び出し方法に問題あるのでしょうか?

  • SQLのIN関数に関して

    調べても見つからずすいませんが質問させてください。 SQLのIN関数にてNULLは使用できないのでしょうか? 例:項目 IN (NULL,'') といった具合にしても無理でしょうか? Vb.net 2005 SQLServer 2005 を使用しています。

  • 一定時間ごとにプログラムを起動させるプログラムを作りたい

    「一定時間ごとにプログラムを起動させる」プログラムを、 作成したいと考えております。 #include <windows.h> #include <stdio.h> void CALLBACK kidou() { char pass[255]; sprintf(pass,"./test1.exe"); ShellExecute(NULL, NULL, pass, NULL, NULL, SW_SHOWNORMAL); } void main() { SetTimer(NULL,1,1000,kidou); } この様な感じで作成しましたが、「test.exe」を起動できませんでした。 どのような修正をしたら良いのか教えていただけないでしょうか?

  • select関数について(winsock)

    こんにちは。 大変お世話になっております。 select関数を用いてタイムアウト処理等を実装したいと思っています。tv_usecはマイクロ秒の精度を持つと記述されていました。以下のような記述を行なうことで、50msたてばタイムアウトされるのでしょうか? selectのtv_usecの精度は1μ秒の精度はあるのでしょうか? struct timeval timeout; timeout.tv_sec=0 timeout.tv_usec=50000 select(0,&fds,NULL,NULL,&timeout) よろしくお願いします。

  • 一部が共通の複数行を1行にまとめるには

    以下のようなテーブルがあります。 項目1  項目2  項目3  項目4 ------------------------------------------------- AAA  あああ  (NULL)  5678 AAA  あああ  1234 (NULL) BBB  いいい  @@@@ (NULL) BBB  いいい  (NULL)  **** CCC  ううう  &&&& (NULL) これを 項目1  項目2  項目3  項目4 ------------------------------------------------- AAA  あああ  1234 5678 BBB  いいい  @@@@ **** CCC  ううう  &&&& (NULL) のように項目1、2が同じ値、かつ項目3、4が(NULL)の部分を1行にまとめたいのです。 データ「CCC」の行のように項目1、2が同じものがなければ、何もせずそのまま出力もしたいです。 よろしくご教授お願いいたします。