hidebun の回答履歴
- 別スレッドとイベントの終了手順について
C#の質問になります。 メインフォーム上で別スレッドを起動し、別スレッドからのイベントで メインフォーム上のテキストボックスにメッセージを表示しています。 サンプルソースはフォームにボタン2個とテキストボックス1個を貼り 付けたものになり、ボタン1でスレッド起動、ボタン2で停止させてい ます。 正常パターンでボタン1とボタン2を交互に押下すると意図したとおり テキストボックスにメッセージが出力されます。 このプログラムで、ボタン1を押下し別スレッドが起動した状態で、 フォームの×ボタンを押下すると別スレッドの停止処理中にJoin() 呼び出しで永久に止まってしまいます。 止めるべきスレッド中でイベント(OnTraceEvent)を呼び出している のが問題のような気がします。(この処理がなければ正常) このような時の終了手順の王道的なものはありますでしょうか。 public partial class Form1 : Form { ThreadTest _thread = null; public Form1() { InitializeComponent(); } private void button1_Click( object sender, EventArgs e ) { if ( this._thread == null ) { this._thread = new ThreadTest(); this._thread.TraceEvent += new ThreadTest.TraceEventHandler( OnTrace ); this._thread.Open(); } } private void button2_Click( object sender, EventArgs e ) { if ( this._thread != null ) { this._thread.Close(); this._thread.TraceEvent -= new ThreadTest.TraceEventHandler( OnTrace ); this._thread = null; } } private void OnTrace(String message) { if ( this.IsHandleCreated == false ) { return; } MethodInvoker process = (MethodInvoker)delegate() { textBox1.AppendText( message + "\r\n" ); }; if ( this.InvokeRequired ) { this.Invoke( process ); } else { process.Invoke(); } return; } private void Form1_FormClosed( object sender, FormClosedEventArgs e ) { //フォームの×ボタンを押下した時にスレッドを停止しないと //破棄されたコントロールを操作しようとするため下記を追加 if ( this._thread != null ) { this._thread.Close(); this._thread.TraceEvent -= new ThreadTest.TraceEventHandler( OnTrace ); this._thread = null; } } } class ThreadTest { public delegate void TraceEventHandler( String message ); public event TraceEventHandler TraceEvent; protected virtual void OnTraceEvent( String message ) { TraceEventHandler TraceEventTemp = TraceEvent; if ( TraceEventTemp != null ) { TraceEventTemp( message ); } } private Thread _threadLoop = null; private volatile Boolean _threadFlag = false; public void Open() { //スレッド開始 if ( this._threadLoop == null ) { this._threadLoop = new Thread( new ThreadStart( Loop ) ); this._threadLoop.Start(); while ( !this._threadLoop.IsAlive ) ; } } public void Close() { //スレッド停止 if ( this._threadLoop != null ) { this._threadFlag = false; //this._threadLoop.Abort();//ここを有効にすればとりあえず終了する this._threadLoop.Join(); this._threadLoop = null; } } public void Loop() { this._threadFlag = true; while ( this._threadFlag ) { OnTraceEvent( DateTime.Now.ToString( "yyyy/MM/dd hh:mm:ss:fff" ) ); Thread.Sleep( 100 ); } } }
- レジストリを変更している最中に値の変更は?
C#であるプログラムをキックさせています。 「キックしたプログラム」はインストールを行いレジストリを作りますが、仕様として「初期値」を作るようにしかできておらず設定が面倒なので「キックするプログラム」がレジストリが作られたことを確認した後、値を突っ込むような作り方を試しています。 プログラムを動かしてわかったのですが、レジストリの存在まで確認できているにも関わらず何故か値の更新がされません。 レジストリを作っている最中に値の書き込みは不可能でしょうか? また、「キックしたプログラム」はユーザーに再起動をするように求めてきます。 ですので、再起動をする前にレジストリの書き換えをしたいのですがそのあたりをプログラムでコントロールさせることは可能でしょうか。
- 経験の浅いプログラマーはどう見られている?
私は、プログラム未経験で、プログラマーになりました。 プログラムを始めて3年目になります。 周りに迷惑をかけながらもなんとか2年間プログラマーとしてやってきました。 3年目になって、開発環境が変わり、開発環境の構築で、早速まわりに迷惑を かけてしまっています。周りの人にかなり手間を掛けさせてしまっているため、 「自分いないほうが、良いんじゃないか。」と思ってしまうこともしばしばあります。 会社に入ってから、あまりに仕事ができないために、自信の持てない 人間になってしまったなーと感じています。 自分の面倒を見てる人は、「自分のことをどう思ってるんだろう。」 「自分はどういう心構えで仕事に立ち向かったらいいのだろう。」 と悩んでいます。 「プログラマーじゃない仕事に就く」事も視野に入れていますが、 何かアドバイスいただけないでしょうか。 よろしくお願いします。
- 締切済み
- C・C++・C#
- yosino0326
- 回答数8
- 経験の浅いプログラマーはどう見られている?
私は、プログラム未経験で、プログラマーになりました。 プログラムを始めて3年目になります。 周りに迷惑をかけながらもなんとか2年間プログラマーとしてやってきました。 3年目になって、開発環境が変わり、開発環境の構築で、早速まわりに迷惑を かけてしまっています。周りの人にかなり手間を掛けさせてしまっているため、 「自分いないほうが、良いんじゃないか。」と思ってしまうこともしばしばあります。 会社に入ってから、あまりに仕事ができないために、自信の持てない 人間になってしまったなーと感じています。 自分の面倒を見てる人は、「自分のことをどう思ってるんだろう。」 「自分はどういう心構えで仕事に立ち向かったらいいのだろう。」 と悩んでいます。 「プログラマーじゃない仕事に就く」事も視野に入れていますが、 何かアドバイスいただけないでしょうか。 よろしくお願いします。
- 締切済み
- C・C++・C#
- yosino0326
- 回答数8
- C++ 構造体の一括初期化 {0}
構造体変数に {0} を代入すると、CString は空文字、 intは0に一括で初期化されるようです。 なんでこんなことが出来るのでしょう? {0}は何? 仕組みを教えて下さい!!
- ベストアンサー
- C・C++・C#
- nevertheless
- 回答数6
- VC++ 2010でlog4cxxビルドできない
Windows7 + VC++ 2010 Expressで、log4cxxをビルドできずに困っています。 log4cxx本家の手順等を参考にして環境構築をしていますが、手順二つ目の projects/log4cxx.dsw のファイルを開く際に、 ”プロジェクトファイル C:\log4cxx\apr\apr.dspが読み込めません というエラーが表示されプロジェクトのアップデートに失敗します。(ビルドの段階までいっていません) log4cxx.dswは、VC++6Workspaceとなっているので、いきなり2010で開くのではなく、一旦VC++2008でアップデートしてから2010で開いてみましたがダメでした。 VC++ 2010 + log4cxxで、ビルドできた方いませんか? 参考URL http://logging.apache.org/log4cxx/building/vstudio.html
- VC++ 2010でlog4cxxビルドできない
Windows7 + VC++ 2010 Expressで、log4cxxをビルドできずに困っています。 log4cxx本家の手順等を参考にして環境構築をしていますが、手順二つ目の projects/log4cxx.dsw のファイルを開く際に、 ”プロジェクトファイル C:\log4cxx\apr\apr.dspが読み込めません というエラーが表示されプロジェクトのアップデートに失敗します。(ビルドの段階までいっていません) log4cxx.dswは、VC++6Workspaceとなっているので、いきなり2010で開くのではなく、一旦VC++2008でアップデートしてから2010で開いてみましたがダメでした。 VC++ 2010 + log4cxxで、ビルドできた方いませんか? 参考URL http://logging.apache.org/log4cxx/building/vstudio.html
- VC++ 2010でlog4cxxビルドできない
Windows7 + VC++ 2010 Expressで、log4cxxをビルドできずに困っています。 log4cxx本家の手順等を参考にして環境構築をしていますが、手順二つ目の projects/log4cxx.dsw のファイルを開く際に、 ”プロジェクトファイル C:\log4cxx\apr\apr.dspが読み込めません というエラーが表示されプロジェクトのアップデートに失敗します。(ビルドの段階までいっていません) log4cxx.dswは、VC++6Workspaceとなっているので、いきなり2010で開くのではなく、一旦VC++2008でアップデートしてから2010で開いてみましたがダメでした。 VC++ 2010 + log4cxxで、ビルドできた方いませんか? 参考URL http://logging.apache.org/log4cxx/building/vstudio.html
- VC++ 2010でlog4cxxビルドできない
Windows7 + VC++ 2010 Expressで、log4cxxをビルドできずに困っています。 log4cxx本家の手順等を参考にして環境構築をしていますが、手順二つ目の projects/log4cxx.dsw のファイルを開く際に、 ”プロジェクトファイル C:\log4cxx\apr\apr.dspが読み込めません というエラーが表示されプロジェクトのアップデートに失敗します。(ビルドの段階までいっていません) log4cxx.dswは、VC++6Workspaceとなっているので、いきなり2010で開くのではなく、一旦VC++2008でアップデートしてから2010で開いてみましたがダメでした。 VC++ 2010 + log4cxxで、ビルドできた方いませんか? 参考URL http://logging.apache.org/log4cxx/building/vstudio.html
- VC++ 2010でlog4cxxビルドできない
Windows7 + VC++ 2010 Expressで、log4cxxをビルドできずに困っています。 log4cxx本家の手順等を参考にして環境構築をしていますが、手順二つ目の projects/log4cxx.dsw のファイルを開く際に、 ”プロジェクトファイル C:\log4cxx\apr\apr.dspが読み込めません というエラーが表示されプロジェクトのアップデートに失敗します。(ビルドの段階までいっていません) log4cxx.dswは、VC++6Workspaceとなっているので、いきなり2010で開くのではなく、一旦VC++2008でアップデートしてから2010で開いてみましたがダメでした。 VC++ 2010 + log4cxxで、ビルドできた方いませんか? 参考URL http://logging.apache.org/log4cxx/building/vstudio.html
- VC++ 2010でlog4cxxビルドできない
Windows7 + VC++ 2010 Expressで、log4cxxをビルドできずに困っています。 log4cxx本家の手順等を参考にして環境構築をしていますが、手順二つ目の projects/log4cxx.dsw のファイルを開く際に、 ”プロジェクトファイル C:\log4cxx\apr\apr.dspが読み込めません というエラーが表示されプロジェクトのアップデートに失敗します。(ビルドの段階までいっていません) log4cxx.dswは、VC++6Workspaceとなっているので、いきなり2010で開くのではなく、一旦VC++2008でアップデートしてから2010で開いてみましたがダメでした。 VC++ 2010 + log4cxxで、ビルドできた方いませんか? 参考URL http://logging.apache.org/log4cxx/building/vstudio.html
- matlabとvs2008について
Visual Studio 2008のC++言語で、matlabを使うにはどうやって設定すればいいでしょうか?よろしくお願いします。
- matlabとvs2008について
Visual Studio 2008のC++言語で、matlabを使うにはどうやって設定すればいいでしょうか?よろしくお願いします。
- matlabとvs2008について
Visual Studio 2008のC++言語で、matlabを使うにはどうやって設定すればいいでしょうか?よろしくお願いします。
- ビデオカード・モニタ交換後CPU使用率が100%
ビデオカードとモニタを交換して再起動すると、CPU使用率が50%(1つのコアが100%)になっています。 タスクマネージャで見ても、どのプロセスがわからなかったのですが、Sysinternals Process Explorerで見ると、Interruptsが50%になっていました。 何度再起動しても同じ状況です。 過負荷なのかと思い、起動後、解像度または、色数を変えると、この現象はなくなります。 その後、元の解像度、色数に戻しても、再発しないので、過負荷ではないのかもしれません。 その後、再起動すると、またInterruptが50%でした。 起動中ははっきりしませんが、たぶん同じなので、起動時間も長くなっています。 ドライバは2/13日にAMDからダウンロードしました。 原因・対策おわかりの方はいらっしゃらないでしょうか。 HP dx5150 MT Athlon 64 X2 4200+ Windows XP 32bit sp3 ATI Radeon HD 4300/4500 Series(これを刺してからオンボードRadeon X200はOSに認識されていない) HP LP3065 2560×1600 32ビットカラー Catalyst 12.1 2Dドライバ 6.14.10.7246 Direct3D 6.14.10.0887 OpenGL 6.14.10.11399 Catalyst Control Center 2011.1205.2146.38999 AIW/VIVO WDM 6.14.10.6238
- picの連射状態について
閲覧ありがとうございます。 現在学校でPICマイコンを使った授業をしており、スイッチを押すと7セグLEDがカウントアップ されるものを作っているのですが、どう作っても連射状態(スイッチを押しっぱなしだと勝手に カウントアップされる)になるのですが、これをスイッチを押すたびにカウントアップするように するにはどうすれば良いのでしょうか? 言語はCで使用PICは16F84A、環境はMPLABでCCS-Cコンパイラを使用 しています。
- ベストアンサー
- C・C++・C#
- pocket0173
- 回答数3
- OpenCVでサンプルコードを使うとエラーが出ます
環境はVidualStudio2008、OpenCVは2.1のバージョンを利用しています。 OpenCVのテンプレートマッチングのサンプルを利用したところエラーが発生しました。 ソースは以下のものを使っています。 ところどころに入っているprintfは私が自分で入れたものですがこれが原因であるとは考えにくいのです。 エラーは添付したような画像で現れます。 またデバッグしたところ [下のフレームは間違っているか、または見つかりません。KernelBase.dll に対して読み込まれたシンボルはありません。] KernelBase.dll!76b7b9bc() このような文章も表示されました。 どうすれば解決できるでしょうか。 #include <cv.h> #include <highgui.h> int main (int argc, char **argv) { double min_val, max_val; CvPoint min_loc, max_loc; CvSize dst_size; IplImage *src_img, *tmp_img, *dst_img; argv[1]="○○"; argv[2]="○○"; argc=3; printf("1complete\n"); cvNamedWindow ("Image", 1); src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR); tmp_img = cvLoadImage (argv[2], CV_LOAD_IMAGE_COLOR); if(argc != 3 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR))==0||(tmp_img = cvLoadImage (argv[2], CV_LOAD_IMAGE_COLOR))==0) return -1; printf("2complete\n"); // (1)探索画像全体に対して,テンプレートのマッチング値(指定した手法に依存)を計算 dst_size = cvSize (src_img->width - tmp_img->width + 1, src_img->height - tmp_img->height + 1); printf("2-1complete\n"); dst_img = cvCreateImage (dst_size, IPL_DEPTH_32F, 1); //ここで動作停止 printf("2-2complete\n"); cvMatchTemplate (src_img, tmp_img, dst_img, CV_TM_CCOEFF_NORMED); printf("2-3complete\n"); cvMinMaxLoc (dst_img, &min_val, &max_val, &min_loc, &max_loc, NULL); printf("3complete\n"); // (2)テンプレートに対応する位置に矩形を描画 cvRectangle (src_img, max_loc, cvPoint (max_loc.x + tmp_img->width, max_loc.y + tmp_img->height), CV_RGB (255, 0, 0), 3); printf("4complete\n"); cvShowImage ("Image", src_img); printf("ALL COMPLETE!\n"); cvWaitKey (0); cvDestroyWindow ("Image"); cvReleaseImage (&src_img); cvReleaseImage (&tmp_img); cvReleaseImage (&dst_img); return 0; }
- picの連射状態について
閲覧ありがとうございます。 現在学校でPICマイコンを使った授業をしており、スイッチを押すと7セグLEDがカウントアップ されるものを作っているのですが、どう作っても連射状態(スイッチを押しっぱなしだと勝手に カウントアップされる)になるのですが、これをスイッチを押すたびにカウントアップするように するにはどうすれば良いのでしょうか? 言語はCで使用PICは16F84A、環境はMPLABでCCS-Cコンパイラを使用 しています。
- ベストアンサー
- C・C++・C#
- pocket0173
- 回答数3
- Memoコントロールの1行あたりの格納可能桁数は?
BCB5を使用しています。 Memoコントロールにテキストを表示するテストプログラムを作っています。 表示するテキストはFileから読み込んでいます。 (本番では、Fileのほか、クリップボードからの貼り付けもあります。) MemoコントロールのWordWrapはfalseとなっています。 ところが、1行あたりの桁数が多い場合は1024桁を超える部分は改行されてしまいます。 1024桁を超えていても改行せずに1行の中に収めたいのですが、可能でしょうか?
- VC++2010のデバッグ中の変数表示について
私はいま、高校の課題研究でvc++2010でソフトの製作をしています。 原因のわからないエラーの理由を探るため、よく理解もしていないデバックのブレークポイントを駆使して変数の中身を見て回っているのですが、時折「自動変数」の欄にも「ローカル変数」の欄にも表示されない変数があります。 あれは、どういった理由で表示されないのでしょうか。 ソースすべては長いので載せませんが、問題の部分だけ載せておきます。 char *p; char *result; p = (char*)System::Runtime::InteropServices::Marshal:: StringToHGlobalAnsi(data[i]).ToPointer(); //Mecabインスタンスの作成 MeCab::Tagger *tagger = MeCab::createTagger (""); result = (char*)tagger->parse(p); //←形態素解析されたデータを格納しているのですが、エラーが起こるような処理ではないと思います。 delete tagger; System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(p)); String^ SResult = gcnew String(result); //←ここで「ハンドルされていない例外」が入り、デバックが中断されます MessageBox::Show(SResult); resultの中身を見たいのですが、表示されません。 ソースのコメント分のあたりにブレークポイントを入れたときには、*pに正常に値が入っていることが確認できました。 例外が発生したときのメッセージウィンドウの表記 「'System.AccessViolationException' のハンドルされていない例外が guiapp.exe で発生しました。 追加情報: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」 よくばりですが、例外が発生した原因についても気が付くことがありましたら指摘してください。 わかりづらい文章で申し訳ないですが、よろしくお願いします。