三つほど質問があります。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あま
記事: 43
登録日時: 9年前

三つほど質問があります。

#1

投稿記事 by あま » 9年前

質問の内容が似ていないので別々にスレッドを立てようかと思いましたが、
仕事やらで忙しくなかなか来れる暇がないのでまとめて失礼します。
※なるべく顔を出したいのですが、いつも返信送れてしまいます。

①、『C言語での(組み込み系ではなくCUIやGUIでのソフト作成)』初心者、中級者、上級者の定義とはなんでしょうか?
たぶん人それぞれ考えかたは違うと思うのですが、回答者様の意見を聞かせてください。
ちなみに私はGUIでの作成などはあまりやらないので大体コンソールで動かします。
ソケットでパケットキャプチャ、チャットなどは作れます。

②、これからどんどんGUIのソフトを作りたいと思ってるのでWin32APIをもっと勉強したいのですが
なにかいい参考書はありますか?
一応自分的には

これを買おうかな?と思っていますが、
「これはよくない」「こっちの方がいい」などありましたらお願いします。

③、最後の質問ですが、昨日から今日にかけて作成した2ちゃんねるなどで使用するトリップ作成機が
すっっっごく遅いです・・・
前回も作成しているのですが、前回はCUIで作成しました。今回はGUIです。
CUIで動かしていたときでさ遅かったです。
大体3完でいっぱいいっぱいです。4完とかになると6時間くらい放置しても一つもヒットしませんでした。
「見知らぬ国のトリッパー」など使うとすごく早いです。。。
ソースを添付しますので、どこをどうすればもっと早くなるかを教えてください。
できれば5完くらいは作成して欲しいものです・・・
それからこの操作はおかしい、これだとバグることがあるなどの脆弱性があったら教えてください。

以上。長くなりましたが、よろしくお願いします。
添付ファイル
とりっぱぁ~ま.zip
トリップ作成機
(37.75 KiB) ダウンロード数: 37 回

アバター
あたっしゅ
記事: 334
登録日時: 10年前
住所: 東京23区
連絡を取る:

Re: 三つほど質問があります。

#2

投稿記事 by あたっしゅ » 9年前

「俺が仕事している間に、おまえら調べとけ」とか「俺が酒飲んでいる間に、おまえら答えとけ」みたいな
書き込みに、ちゃんとした返事がつくと思っているのでしょうか ? それとも、返事してほしくないのでしょうか ?

「返信送れてしまいます」は、「返信遅れてしまいます」の変換ミスだよね。

(3) の「3完」「4完」「5完」って何 ?
ちょっと「見知らぬ国のトリッパー(w」検索したけど、わからなかった。

とりあえず、(2) だけは答えておく。GUI ソフトを作るのが目的なら、C++Builder とか Visual C# 使った
方が幸せでは ? Win32API も結局は必要になってくるが。
手提鞄あたっしゅ、[MrAtassyu] http://ameblo.jp/mratassyu/
手提鞄屋魚有店(てさげかばんやうおありてん)
レスがついていないものを優先して、レスしています。時々、見当外れなレスをします。

アバター
bitter_fox
記事: 607
登録日時: 9年前
住所: 大阪府

Re: 三つほど質問があります。

#3

投稿記事 by bitter_fox » 9年前

あま さんが書きました:③、最後の質問ですが、昨日から今日にかけて作成した2ちゃんねるなどで使用するトリップ作成機が
すっっっごく遅いです・・・
前回も作成しているのですが、前回はCUIで作成しました。今回はGUIです。
CUIで動かしていたときでさ遅かったです。
大体3完でいっぱいいっぱいです。4完とかになると6時間くらい放置しても一つもヒットしませんでした。
「見知らぬ国のトリッパー」など使うとすごく早いです。。。
ソースを添付しますので、どこをどうすればもっと早くなるかを教えてください。
できれば5完くらいは作成して欲しいものです・・・
それからこの操作はおかしい、これだとバグることがあるなどの脆弱性があったら教えてください。
プログラム見させていただきました。
まず、GUI版がすっっっごく遅くなっている原因はタイマーを使用しているせいです。
タイマーには精度があり処理系依存になるので一般に言えないですが、最近のWindowsの場合は55ms程度のようです。
55msだと仮定すると、一秒が1000msなので一秒に実行できる回数は18回程度になるので非常に遅いですね。

これの解決策としては、タイマーイベント内でループにする(見た目的には100ぐらいが適切でしょうか・・・(500でもいいかもしれません))
か、より精度の高いタイマーを使用するなどがあります。

より精度の高いタイマーを使用するにはtimeSetEvent関数を使用するようです。(ただ、呼び出せるWindowAPIが8個しかないみたいですが・・・(本当かどうかは定かではありません。))
http://msdn.microsoft.com/ja-jp/library/cc428796.aspx
http://dencha.ojaru.jp/programs/pg_midi_01.html - 3参照(もし本当だったとしてもPostMessageをうまく使えばうまくいけそうですね)
http://www11.ocn.ne.jp/~ikalu/win32api/0002.html

また、検索する文字列をランダムで発生させていますが、これでは排他的かつ網羅的に検索できないような気がするのですが・・・

それから、3完,4完が何かわからないので教えていただけますか?

[hr][追記]
マルチスレッドにするのが一番適切かもしれません。

あま
記事: 43
登録日時: 9年前

Re: 三つほど質問があります。

#4

投稿記事 by あま » 9年前

あたっしゅ さんが書きました:「俺が仕事している間に、おまえら調べとけ」とか「俺が酒飲んでいる間に、おまえら答えとけ」みたいな
書き込みに、ちゃんとした返事がつくと思っているのでしょうか ? それとも、返事してほしくないのでしょうか ?

「返信送れてしまいます」は、「返信遅れてしまいます」の変換ミスだよね。

(3) の「3完」「4完」「5完」って何 ?
ちょっと「見知らぬ国のトリッパー(w」検索したけど、わからなかった。

とりあえず、(2) だけは答えておく。GUI ソフトを作るのが目的なら、C++Builder とか Visual C# 使った
方が幸せでは ? Win32API も結局は必要になってくるが。
「俺が仕事している間に、おまえら調べとけ」とか「俺が酒飲んでいる間に、おまえら答えとけ」みたいな
書き込みに見えますか?
もし見えるというならばそれは私の書き方が悪かったですね。
申し訳ないです。
ですが、そう見えるのでしたら回答する必要ないだけですよね?
わざわざ煽ってくるような内容で回答しなくてもいいと思いますが?

あま
記事: 43
登録日時: 9年前

Re: 三つほど質問があります。

#5

投稿記事 by あま » 9年前

[quote="bitter_fox"]
プログラム見させていただきました。
まず、GUI版がすっっっごく遅くなっている原因はタイマーを使用しているせいです。
タイマーには精度があり処理系依存になるので一般に言えないですが、最近のWindowsの場合は55ms程度のようです。
55msだと仮定すると、一秒が1000msなので一秒に実行できる回数は18回程度になるので非常に遅いですね。

これの解決策としては、タイマーイベント内でループにする(見た目的には100ぐらいが適切でしょうか・・・(500でもいいかもしれません))
か、より精度の高いタイマーを使用するなどがあります。

より精度の高いタイマーを使用するにはtimeSetEvent関数を使用するようです。(ただ、呼び出せるWindowAPIが8個しかないみたいですが・・・(本当かどうかは定かではありません。))
http://msdn.microsoft.com/ja-jp/library/cc428796.aspx
http://dencha.ojaru.jp/programs/pg_midi_01.html - 3参照(もし本当だったとしてもPostMessageをうまく使えばうまくいけそうですね)
http://www11.ocn.ne.jp/~ikalu/win32api/0002.html

また、検索する文字列をランダムで発生させていますが、これでは排他的かつ網羅的に検索できないような気がするのですが・・・

それから、3完,4完が何かわからないので教えていただけますか?

[hr][追記]
マルチスレッドにするのが一番適切かもしれません。[/quote

見ていただきありがとうございます。

タイマーイベント内でループということは二重ループのイメージでよろしいでしょうか?

コード:

			while(x < 8)
			{
				i = rand() % 156;

				/*掲示板によっては'<'と'>'が非対応のところがあるので削除。
				  対応しているところではこのif文を解除するだけ。*/
				if((word[i] != '<') && (word[i] != '>'))
				{
					if((x == 1) || (x == 2))
					{
						if(i <= 93)
						{
							input[y] = word[i];
							y++;
							x++;
						}
					}
					else
					{
						input[y] = word[i];
						y++;
						x++;
					}
				}
			}
この部分でも書いてるのですが、word変数には156文字あります。
これを156進数とし、総当りでやる方法もやってみましたのですが、逆に効率が悪かったように思います。
なにかいい方法があったら知恵をお貸しください。
CUIでの方ですが、マルチスレッドにする方法もやってみました。

3完、4完、5完というのは検索文字数のことです。
例えば、「aaa」を前方一致で検索したときに
◆aaa/Le.ciY
◆aaaEibna.l
など、検索文字が完全に一致することを言いました。
5完(5文字)くらいは検索できるようになりたいです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: 三つほど質問があります。

#6

投稿記事 by softya(ソフト屋) » 9年前

みなさん、穏やかにお願いしますね。

>①、『C言語での(組み込み系ではなくCUIやGUIでのソフト作成)』初心者、中級者、上級者の定義とはなんでしょうか?
私なりの定義は、
初級者 ・・・ 文法を覚えたての人。
中級者 ・・・ 難易度の高い文法も理解できて、WinアプリやCUIアプリの経験が3年ぐらい。出来ればライブラリやDLLの作る方なども理解できる人。ここでの質問の大半に回答できる。
[追記]この定義だと、中級と上級の間の人も多くいることに気づきました。中級者と上級者のボーダーを定義させていただきます。経験10年程度で、それなり作れるが深いところには無頓着な人。
上級者 ・・・ WindowsだけでなくマイコンやLinuxなどC言語の動作やライブラリの違いなどにも知識がある。ちょっとしたコンパイラやデバッガなど開発ツール自体の開発もできるレベルの人。
更にこの上の超上級や神領域の人は存在します。

>②、これからどんどんGUIのソフトを作りたいと思ってるのでWin32APIをもっと勉強したいのですが
私としては、先にこちらを読まれることをおすすめします。
「Amazon.co.jp: APIで学ぶWindows徹底理解―できるプログラマになるための (日経BPパソコンベストムック): 安室 浩和, 日経ソフトウエア編: 本」


あと、「公式Win32 APIリファレンス」をちゃんと読んでいないのですが、MSDNとどのぐらい違いがあるか問題だと思います。
あまり違わないならMSDNで十分かなと。Windows2000よりも古いのも気になる点です。それに、これVol4まであるんですが。

こっちの方が今なら狙う対象かと思いますよ。
「Amazon.co.jp: Advanced Windows 第5版 上 (マイクロソフト公式解説書): Jeffrey Richter, Christophe Nasarre, (株)クイープ: 本」


>③、最後の質問ですが、昨日から今日にかけて作成した2ちゃんねるなどで使用するトリップ作成機が

これは別件で質問してもらったほうが回答が付くかと思います。
あとでまた別に書き込みます。

[追記]
こう言う処理時間の読めない処理で、出来るだけ高速に処理したいならスレッドで処理したほうが良いと思います。
ただ、スレッドの負荷が高くなるとWindows全体の動作に支障が出るのでSleepを適度に挟んでください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
bitter_fox
記事: 607
登録日時: 9年前
住所: 大阪府

Re: 三つほど質問があります。

#7

投稿記事 by bitter_fox » 9年前

あま さんが書きました:タイマーイベント内でループということは二重ループのイメージでよろしいでしょうか?
そうですね、コードで言うと次のような感じです。

コード:

	case WM_TIMER:
		for (counter = 0; counter < 300; counter++)
		{
			// 従来の処理
		}
		break;
あま さんが書きました:この部分でも書いてるのですが、word変数には156文字あります。
これを156進数とし、総当りでやる方法もやってみましたのですが、逆に効率が悪かったように思います。
そうなんですか、だったら、乱択アルゴリズムを使った方がいいのかもしれないですね。

ISLe
記事: 2648
登録日時: 10年前
連絡を取る:

Re: 三つほど質問があります。

#8

投稿記事 by ISLe » 9年前

あま さんが書きました:①、『C言語での(組み込み系ではなくCUIやGUIでのソフト作成)』初心者、中級者、上級者の定義とはなんでしょうか?
初心者…すぐに他人に聞く。
初級者…自分のやりたいことをまとめてから他人に聞く。
中級者…自分で調べて解決できる。
上級者…興味のあること新しいことを調べてたくさん引き出しを持っている。
あま さんが書きました:②、これからどんどんGUIのソフトを作りたいと思ってるのでWin32APIをもっと勉強したいのですが
なにかいい参考書はありますか?
softyaさんが既に書かれてますが、オンラインのMSDNライブラリ。
『猫でも分かるプログラミング』のWindows SDK編とか。

閉鎖

“C言語何でも質問掲示板” へ戻る