- 締切済み
VBで新しいスレッド
TAGOSAKU7の回答
- TAGOSAKU7
- ベストアンサー率65% (276/422)
CreateThreadはマルチスレッド対応の言語でしか使用不可です。 VBは基本的にシングルスレッドの言語です。 ActiveXは別スレッドで動くようです。 人から聞いたことで、、、未確認ですが、、、
関連するQ&A
- スレッドについて
スレッドについて、解らないのですが、 以下の文があると、1つのスレッドが終了するか終了しないかにかかわず、 次々とスレッドを立ち上げるものなんですか? いろいろな、APIでコントロール出来ると思いますが、 基本的には、次々とスレッドを立ち上げるものなんですか? 教えてください。 WM_CREATE: CreateThread(NULL,0,ThreadFunc,&A,0,&WID); CreateThread(NULL,0,ThreadFunc,&A,0,&WID); CreateThread(NULL,0,ThreadFunc,&A,0,&WID); CreateThread(NULL,0,ThreadFunc,&A,0,&WID); CreateThread(NULL,0,ThreadFunc,&A,0,&WID);
- ベストアンサー
- C・C++・C#
- win32 スレッドのハンドルついて
windowsのスレッドについての質問です。 今、手元にある書籍のスレッドを作る節にCreateThread()関数を使ってスレッドを作るサンプルプログラムが載っています。 その中では CloseHandle()関数が一切呼ばれていません。 しかも、そのサンプルではいくつもスレッドを作り、そのスレッドはプログラム中でいくつも終了するようなものです。CloseHandle()は呼び出さなくても問題ないのでしょうか? しかし、ネットで調べてみるとCloseHandle()を呼び出さなくてはいけないということが書かれていました。 http://www.daccho-it.com/program/WinApi/thread.htm ↑ 参考にしたサイト そこでいくつか質問です。 プロセスが終了するときにスレッドのハンドルは自動的に閉じられるという認識で大丈夫でしょうか? CreateThread()、_beginthreadex関数はCloseHandle()を呼び出す必要があるで大丈夫でしょうか? となると、CreateThread()の戻り値は必ず変数に保存しておく必要があるということですか? 書籍のサンプルではCreateThread()の戻り値はどこにも保存していませんでした、保存しない場合ハンドルが作られないってことはさすがにないですよね? よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- スレッド処理内の変数の参照について
大変困ってます。 今、親プロセスからスレッド内の変数に設定したいのですが方法がわかりません。 スレッドからの場合、普通行えばいいのでわかるのですが ・・・。 (詳細) メインプロセス(A) クリエートスレッド後のスレッド(B) 1.(A)で(B)をCreateThread 2.(A)の本処理で(B)の構造体にmemcpyの方法が わかりません。 3.知っている方がいましたら教えていただけませんか。 4.読みずらい文章ですみません。宜しくお願いします。
- ベストアンサー
- C・C++・C#
- VB2008で
VB2008で System.Threading.Thread.Sleepを使って5秒後にテキストボックスにaと表示させるプログラムを作ろうとしましたが、うまくいなないため、タイマーコントロールを使用したいと思ったのですが、どのようにしたらいいでしょうか?
- ベストアンサー
- Visual Basic
- スレッドの終了を知りたい(WindowsAPI)
CreateThread()で作成したスレッドの終了を知りたい (具体的には、スレッドが終了するまで待機したい)のですが、 うまくいかず困っています。WindowsAPIに関する本やネットで調べた ところ、WaitForSingleObject()が適用できると考え、 以下のようなプログラムを作成したのですが、 元のスレッドがWaitForSingleObject()のところで 止まると同時に、CreateThread()で作成されたThread_1()も 止まってしまいます。アドバイスいただけますでしょうか。 ----プログラム(該当部分)ここから---- DWORD Thread_1(LPVOID param) { int i; char buff[128]; /* iが99のときのみ終了してよい */ while(g_iFlg == 1) { for(i = 0; i < 100; i++) { Sleep(100); wsprintf(buff, "%d", i); SetDlgItemText((HWND)param, IDC_STATIC_1, buff); } } ExitThread(0); return 0; } BOOL CALLBACK Proc_2(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: g_iFlg = 1; g_hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Thread_1, (LPVOID)hDlg, 0, &g_dwThread); return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDC_BUTTON_CANCEL: case IDCANCEL: g_iFlg = 0; WaitForSingleObject(g_hThread, INFINITE); CloseHandle(g_hThread); EndDialog(hDlg, 0); return TRUE; } } return FALSE; } ----プログラム(該当部分)ここまで----
- ベストアンサー
- C・C++・C#
- スレッドについて
お世話様です。 Windowsのスレッドについて質問です。(WinXP C#.NET2003) 以下のようなコードでスレッドを作成した場合、どうなるのか教えてください。 private void BTN_input_Click(object sender, System.EventArgs e) { Thread iwth = new Thread( new ThreadStart(InputWaitThread) ); iwth.Start(); } (1)iwthは動的に割り当てたのでBTN_input_Click関数内でのみ有効だと 思うのですが、BTN_input_Click関数を抜けてしまったあとは、 InputWaitThreadを実行するスレッドは どういう位置づけになるのでしょうか? (ゾンビプロセスですか?) (2)また、このコードを含むアプリケーションの終了時、 InputWaitThreadがまだ終了していない場合は、 強制的に終了されるのでしょうか? (3)InputWaitThreadが必ず終了するという保障がない場合には、 KILLしてやらなければいけないと思いますが、動的に割り当てたので ハンドラがおらずKILLできませんが、どうすればいいのでしょうか? (静的に割り当てておくしかないのでしょうか?) 以上、よろしくご教授願います。(@±@)
- 締切済み
- C・C++・C#
- VB タイマーコントロールをインデックスを使用し130個作成しました。
VB タイマーコントロールをインデックスを使用し130個作成しました。 タイマーイベントの表記はどのようにするのでしょうか。 Private Sub Timer(0)_Timer() ~ End Sub とするとエラーになります。タイマーコントロールのインデックスの使い方が分かりません。よろしくお願いします。
- ベストアンサー
- Visual Basic
- スレッド処理内での終了結果を知りたい
VC++6.0(SP5)を使って、コマンドプロンプトのような処理を作成しています。 1.CreateProcess()でMS-DOSプロンプトを起動 2.CreatePipe()で実行コマンドの読み取り/終了監視スレッド用ハンドル作成 3.CreateThread()で実行コマンドの読み取り/終了監視スレッド作成 4.WriteFile()、ReadFile()を使っています。 'Dir'コマンド等を実行した際、通常プロンプトに表示されるメッセージを 読み取れてエディットボックスに表示できるのですが、異常/正常に関わらず 終了した時を取得したいのですが・・・。 (詳細) 1.WriteFile()を使って'Dir'コマンド実行 2.実行コマンドの出力が完了←この時点でコマンドプロンプトを終了させたい ※WriteFile()関数の実行終了ではなく、'Dir'コマンド実行終了を知りたい 何方かご教授お願いします。
- 締切済み
- C・C++・C#
- VB6.0のListBoxの使い方について
VB6.0でリストボックスを3つ作成(配列index0~2)し、index=0のリストボックスをクリックした際にその項目を変数Xに入れたいのですが、X=List1.List(List.ListIndex)でやろうとするとエラーになります。なぜでしょう。何か参照になるサイトありますでしょうか?
- ベストアンサー
- Visual Basic
- マルチスレッドでの画像描画
マルチスレッドを使ってロード画面を作ろうとしているのですが、 上手く画像が描画更新してくれません。 スレッドの中身は下記の通りです。よろしくお願いします。 HRESULT GameMain::LoadScreen() { // スレッドの生成 static bool onlyonce_createthread = FALSE; if(onlyonce_createthread ==FALSE) { hTh = (HANDLE)_beginthreadex( NULL, // SECURITY_ATTRIBUTES 構造体へのポインタ 0, // 新規スレッドのスタックサイズ &loadthread, // スレッドの実行開始アドレス this, // 新規スレッドに渡される引数リスト 0, // 新規スレッドの初期状態 (unsigned*)&thID ); // スレッドのIDを格納するためのDWORD型変数へのポインタ onlyonce_createthread =TRUE; } // ローディング画面の描画 static bool loopflg = TRUE; while(loopflg) { int threadCondition = CheckThread( hTh ); switch(threadCondition) { case THREAD_RUNNING: if(graphloaded_flg ==TRUE) { EnterCriticalSection( &m_criticalSection ); load_item = (float)(load_item/MAX_LOAD_ITEM); LeaveCriticalSection( &m_criticalSection ); d2d_control->GaugeDraw(0, 0, load_item); Sleep(100); } break; case THREAD_EXIT: loopflg =FALSE; break; case THREAD_ERROR: return E_FAIL; break; } } return S_OK; }
- ベストアンサー
- C・C++・C#
お礼
うーむ、ActiveXですか~。 自分で作ったActiveXカスタムコントロールは、別スレッドではないようです(笑。 ほかにも別スレッドで動きそうなコントロールを探しましたが、なかなか・・・。 VC++で作ったカスタムコントロールならできそうですが、そっちの知識は・・・。