トップページ⇒tech
1001コメント351KB

【初心者歓迎】C/C++室 Ver.44【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/11/03(土) 00:20:13
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.43【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1190860744/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0357デフォルトの名無しさん2007/11/17(土) 09:02:21
DXライブラリについて質問なんですが

ScreenFlip関数ってのは、「表示する画面を入れ替える」なんでしょうか、それとも「書き込む画面を入れ替える」なんでしょうか?
03583572007/11/17(土) 09:07:00
唐突に解決しました
すんません
0359デフォルトの名無しさん2007/11/17(土) 15:31:07
>>349
>>355
プログラミング言語C++(第3版)の7.4(p193)にあります。立ち読みでどうぞ。
0360デフォルトの名無しさん2007/11/17(土) 15:39:45
ほかではC++の設計と進化にも抜粋されているはず。
0361デフォルトの名無しさん2007/11/17(土) 15:56:49
どうしても解決できないので教えてください。
MFCでメンバ変数のCFontをOnInitDialog内でダイアログのコントロールに設定してますが、
なぜかフォントの種類がMS ゴシックになってしまいます。

デフォルトはダイアログエディタでMS 明朝にしてます。
が、SetFontを呼ぶとサイズはCreatePointFontで指定したサイズになりますが、
なぜかフォントの種類が勝手にMS ゴシックになってしまうのです。
フォントには何を指定してもだめでした。(意味はなくてもMS 明朝で試しましたがMS ゴシックになりました)

サイズは変わってるのに何故でしょうか?
03623612007/11/17(土) 16:22:41
ごめんなさいごめんなさい。
フォント作成時に指定したフォント名に1バイト余計な空白がありました。
なのにCreatePointFontが成功を返してたので気づきませんでした。
0363OPENCV2007/11/17(土) 19:35:00
>>356
>>359
コメントありがとうございます。
立ち読みして、ルールを知って、解決しようと思います。
0364デフォルトの名無しさん2007/11/18(日) 13:34:54
VC6、非MFCで開発をしています。
char *utf8Char に、ヌルターミネイトされたUTF8のバイト列が入っています。
("wb"でfopenして、fwrite( utf8Char, strlen( utf8Char), 1, fp )したものを
 テキストエディタでUTF8指定で開くとちゃんと読める。
 何もせずにcoutしてDOS窓に出すと、ASCII文字は読めるけど日本語が化ける)

これを_bstr_t型の変数に入れ込みたいのですが、どうすれば良いのでしょうか。
_bstr_t utf8Bstr( utf8Char );
cout << _com_util::ConvertBSTRToString( utf8Bstr ) << endl;
とすると、全体が文字化けしたようになりますし、
WideCharToMultibyteで別のchar *hogeに入れて、cout << hoge << endl;
としても文字化けしました…。
0365デフォルトの名無しさん2007/11/18(日) 14:14:04
utf-8はMultiByte。_bstr_tはメモリ確保が特殊なWCHAR。
だから、MultiByte2WideCharなんかで、UTF-8を明示した上で、WCHAR変換をかける。

これ以外の、ソースエンコーディングの指定がない変換系関数は、だいたい
ANSIコード(日本ではCP932)を仮定するので、変換が破綻する。
0366デフォルトの名無しさん2007/11/18(日) 16:15:42
>>365
http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200701/07010007.txt
このページの最後の方にある、UTF8ToUTF16という処理であってますでしょうか?
手元に開発環境がないので、今試せないのですが…。
0367デフォルトの名無しさん2007/11/18(日) 18:12:18
CComPtr< IHoge > hoge;
CComPtr< IHage > hage;

//hoge->HageがIHageのインスタンスを持つ処理

hage = hoge->Hage;
としたとき、その後すぐ hoge.Release() としてもいいんでしょうか。
した後でもhageはNULLになったりしてないようですが、
それはたまたまメモリがそのままになってるだけで、本当はhageを完全に使い終わってから
hage.Release();
hoge.Release();
としなければならないのでしょうか。
0368デフォルトの名無しさん2007/11/18(日) 19:43:29
>>366
それでもあってはいるけど、俺だったら直接_bstr_tへ書き込むようにする。
BOOL UTF8ToUTF16(const char* data, const int len, _bstr_t& ret)
{
    if (!data)
    {
        return FALSE;
    }
    if (len == 0)
    {
        ret = L"";
        return TRUE;
    }
    _bstr_t t;
    const int wlen = ::MultiByteToWideChar(CP_UTF8, 0, data, len, NULL, 0);
    if (wlen == 0)
    {
        return FALSE;
    }
    t.Attach(SysAllocStringLen(0, wlen));
    if (t.GetBSTR() == 0)
    {
        return FALSE;
    }
    if (::MultiByteToWideChar(CP_UTF8, 0, data, len, t.GetBSTR(), wlen) != 0)
    {
        ret = t;
        return TRUE;
    }
    return FALSE;
}
0369デフォルトの名無しさん2007/11/18(日) 19:46:13
>>367
そのための参照カウントなのだから大丈夫。
そもそもCComPtr使うんだったら、
必要に迫られない限りReleaseを明示的に呼ぶ必要もないと思うけど。
0370デフォルトの名無しさん2007/11/18(日) 19:50:32
CComPtrって、何がいいんだっけ
VC++なら_com_ptr_t使ったほうがよくね?
0371デフォルトの名無しさん2007/11/18(日) 19:52:24
>>367
理論上はhoge.Release()を先にしても問題無いし、そう実装されているべき。
ただ、OfficeのApplicationオブジェクトとかで、
稀に子オブジェクトも一緒くたに無効化してしまうことがあるので、
一応頭の片隅に置いておくといい。
昔の話かもしれないけど。
0372デフォルトの名無しさん2007/11/18(日) 19:58:16
>>370
_COM_SMARTPTR_TYPEDEF ('A`)マンドクセ
例外対応 ('A`)マンドクセ
ATLのシンプルな構造 (゚д゚)ウマー
0373デフォルトの名無しさん2007/11/18(日) 20:09:14
class hoge{
int x;
int y;
};

というクラスの「ポインタ」がたくさん入ったvectorがあるとして、
例えばこれを各ポインタが指しているxでソートすることってできますか?
ポインタでなければ<の定義でできると思うんですが、
ポインタの場合どうやって書いたらよいか分かりません。
もし可能でしたら書き方を教えてください。お願いします。
0374デフォルトの名無しさん2007/11/18(日) 20:11:36
MFCとboostを併用するというのはアリですか?
0375デフォルトの名無しさん2007/11/18(日) 20:17:19
>>373 比較関数つきの sort() を使う。
>>374 アリ。
0376デフォルトの名無しさん2007/11/18(日) 20:32:08
#include <algorithm>
#include <functional>
#include <vector>
#include <cassert>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
struct Value {
  int x;
  int y;
};
struct comparator : public std::binary_function<const Value*, const Value*, bool> {
  result_type operator()(first_argument_type lhs, second_argument_type rhs) const {
    return lhs->x > rhs->x;
  }
};
int main() {
  Value v0 = { 1,2 }, v1 = { 2,3};
  std::vector<Value*> v;
  v.push_back(&v0);
  v.push_back(&v1);
  std::sort(v.begin(), v.end(), comparator());
  assert(v[0]->x == 2 || v[0]->y == 3);
  using namespace boost::lambda;
  std::sort(v.begin(), v.end(), bind(&Value::x, *_1) < bind(&Value::x, *_2));
  assert(v[0]->x == 1 || v[0]->y == 2);
}

どっちにしろ大概だな
0377デフォルトの名無しさん2007/11/18(日) 20:36:13
速度がカリカリに必要ってんじゃなけりゃ、
bool hoge_less_x(hoge const* lhs, hoge const* rhs) { return lhs->x < rhs->x; }
でいいだろ。
0378デフォルトの名無しさん2007/11/18(日) 20:50:59
>>375-377
ども。
とりあえず比較関数を渡せるsortってのを試してみようと思います。
ありがとうございました。
0379デフォルトの名無しさん2007/11/19(月) 02:46:28
void doSomething(const Widget *p); // Widgetはクラス
という関数があった場合、
doSomething(&Widget());
という風にWidgetのオブジェクトを引数で作成して、そのままアドレス取って呼び出すのは、全く問題ないですか?
0380デフォルトの名無しさん2007/11/19(月) 05:50:07
次のステートメントに移る前には
そのオブジェクトがなくなってしまっていても
いいならいいんじゃないの
0381デフォルトの名無しさん2007/11/19(月) 09:10:29
&何らかのクラス() なんていうのは文法上通るの?
0382デフォルトの名無しさん2007/11/19(月) 10:47:53
>>379
&演算子はオブジェクトに対しては左辺値にしか適用できないんでないか?
0383デフォルトの名無しさん2007/11/19(月) 12:51:39
そうみたいだね
0384デフォルトの名無しさん2007/11/19(月) 12:56:30
最近そんなコードを書いた記憶があったので検索したらごっそり出てきたわ。> &Class()
0385デフォルトの名無しさん2007/11/19(月) 13:05:51
いいこと教えてやる
ファイルを閉じるときに、

fp.close();
while( fp && fp.fail() )Sleep(10);

とやると良いよ
まだ閉じていないで次のやつを開くと駄目だからだ
0386デフォルトの名無しさん2007/11/19(月) 13:08:05
&演算子をオーバーロードすればそういう書き方も通るんでない?

class A{
public:
  A(){}
  int operator&(){return 123;}
};
int main()
{
  printf("%d\n", &A());
}
0387デフォルトの名無しさん2007/11/19(月) 13:14:37
>>386
まずは、その必要性をよく考えたほうがいい。
0388デフォルトの名無しさん2007/11/19(月) 13:15:31
>>386
379はあくまでアドレスが欲しいわけだから意味ないんでない?
0389デフォルトの名無しさん2007/11/19(月) 13:32:34
#include <stdio.h>
#include <string.h>
char s[] = "This is a pen. That is an apple.";
void main(void)
{ char check[256],str[256];
int i;
printf("This is a pen. That is an apple.\n\n");
gets(str);
for(i=0;str[i]==s[i];i++)
{
check[i]=strcmp(str[i],s[i]);
if (check[i]==0)
{printf("ok");}
else
{printf("ng");}}}

初期化した文字列と入力した文字列strに対しThis is〜がstrで始まっているかどうかを
判定するプログラムですが、check[i]=strcmp(str[i],s[i]);にてエラーが出ます。
教えてください(例えばThis→OK,Th→OK,Thos→NG.....)
0390デフォルトの名無しさん2007/11/19(月) 14:05:06
#include <stdio.h>

char s[] = "This is a pen. That is an apple.";

int main(void)
{ char check[256],str[256];
int i,checker;
printf("This is a pen. That is an apple.\n\n");
gets(str);
for(i=0;str[i]!='\0';i++)
if(str[i]==s[i])
{
checker=1;
}

else
{
checker=0;
break;
}

if(checker==0)
{
printf("NG!その文字列から始まっていません。\n");
}

else
{
printf("OK!その文字列から始まっています。\n");
}
}
これでいけた
0391デフォルトの名無しさん2007/11/19(月) 14:10:47
strcmp って string を compare するんだよな…
0392デフォルトの名無しさん2007/11/19(月) 15:06:09
lexicographical_compare アルゴリズムについて教えてください。
この関数はlexicographical_compare(s1, s2);
とした場合、辞書順でs1がs2より前にあるときにtrueを返し、
そうでないときfalseを返すため、文字列の一致は判定できない
と思います。

この関数を使って二つの文字列(string)が等しいことを判定するためには
lexicographical_compare(s1, s2); //false (s1はs2の前にはない)
lexicographical_compare(s2, s1); //false (s2はs1の前にはない)
がともにfalseを返すことを確認しなければいけないのでしょうか?
0393デフォルトの名無しさん2007/11/19(月) 15:43:51
equal とか使えなかったっけ?
03943922007/11/19(月) 15:47:44
実はEffective STLで大文字、小文字を区別しない比較
方法として以下のコードがあるのですが、これでは一致を
判定できないのでは?と思ったんです。

bool ciStringCompare(const string &s1, const string &s2)
{
return lexicographical_compare(s1.begin(), s1.end(),
s2.begin(), s2.end(),
ciCharLess);
}

// 1文字の比較
bool ciCharLess(char c1, char c2)
{
return tolower(static_cast<unsigned char>(c1)) <
tolower(static_cast<unsigend char>(c2));
}
0395デフォルトの名無しさん2007/11/19(月) 15:55:50
>>394
言いたいことがわからん。大文字小文字区別しないならその範囲で
しか一致は判定できないのでは?そんだけじゃないの?
03963922007/11/19(月) 17:03:12
>>395
上記のプログラムでいうと
lexicographical_compareでは一方の文字列が他方のものより
辞書順で前にあるかないかは判定できますが、一致は判定
できないのでは?という意味です。
たとえば、ciStringCompareで二つのstringが一致
するかどうかを判定できるなら
ciStringCompare("ABC", "abc");
はtrueを返すと思ったのですが、呼び出している
lexicographical_compareの仕様ではfalseになります
よね?結局文字列の一致は判定できないのではないかと。

ソース Effective STL 第35項
0397デフォルトの名無しさん2007/11/19(月) 17:27:33
正誤表によるとciStringLessとして使ってくれだってさ。
ttp://www.aristeia.com/BookErrata/estl1e-errata_frames.html
0398デフォルトの名無しさん2007/11/19(月) 18:01:30
CPUとかメモリを良いものに交換したらコンパイルは速くなりますか?
また、どの部分に依存してますか?
0399デフォルトの名無しさん2007/11/19(月) 18:09:15
>>398
CPU,メモリも大事だけど、HDDが高速な方がいい。
ヘッダやライブラリ等がIDE接続のフラッシュメモリにあるとコンパイルは早い。
たぶんね。
0400デフォルトの名無しさん2007/11/19(月) 18:19:26
コンパイラにもよるが、マルチコアやマルチCPUだと複数ファイルいっぺんに
コンパイルするやつもある。
0401デフォルトの名無しさん2007/11/19(月) 18:31:19
各バスも太い方がいい?
0402デフォルトの名無しさん2007/11/19(月) 18:38:58
メモリ(の容量は)マジ大事
スワップが発生したらかなりの速度低下になるし、逆にパフォーマンス改善としては一番コストパフォーマンスがいいかも
最初から2Gとか積んでたらほとんど変わらないだろうがね
ちなみにクロック速度は殆ど関係ないと思うけど、実際はどうなんだろう
04033922007/11/19(月) 18:54:25
>>397
正誤表確認してませんでした。
ありがとうございました。すっきりしました。
0404デフォルトの名無しさん2007/11/19(月) 19:24:08
>>388
thisを返すoperator &をメンバとして定義すれば可能なはず。
誰がやるかそんなもん、って程度のことだが。
0405デフォルトの名無しさん2007/11/19(月) 22:50:54
>>368
すいません、t.Attachのところなんですけど、_bstr_tにAttachという
メソッドが見あたらなかったんですが…。
何かをインクルードすればいいのでしょうか?
0406デフォルトの名無しさん2007/11/19(月) 22:53:11
AttachといえばCComPtr
0407デフォルトの名無しさん2007/11/20(火) 00:19:01
>>406
CComPtr< _bstr_t > t;
とかって…。
違う気がする。
すみません!教えてください!
>>368そのままではコンパイラ通らないので…。
0408デフォルトの名無しさん2007/11/20(火) 01:32:14
>>405
バージョンは何?
少なくともVC++ 7.1にはあるはずなんだけど。
http://msdn2.microsoft.com/en-us/library/c671cyay(VS.71).aspx
0409デフォルトの名無しさん2007/11/20(火) 03:01:35
CComBSTR?
あてずっぽうだけど
0410デフォルトの名無しさん2007/11/20(火) 06:54:36
>>408
VC6です。
0411デフォルトの名無しさん2007/11/20(火) 17:10:12
VC++EpressEdition2005でOpenGL使って
キューブ状態のものにLogo.bmpをテクスチャで貼り付けてクルクル回したスクリーンセーバを作りたいと考えました

OMEGA POINT - プログラミング(OpenGL,数学,画像処理,Win32API, C++) -
http://omega-point.ddo.jp/programming/opengl/index.html

の上から2コ目のzipファイルが使えそうだったのでホイホイ弄ってたら画像の読み込みで壁にぶつかりました
現在はキューブがクルクル回っているところですが、画像は読み込めてません
MFC使ってないのでBitmap定義が使えないみたいなんです ( ; ; )
ResouceFilesにはLogo.bmp(256*256)を登録してあるのでどうにかして触る方法がありませんか?
何かを勘違いしてる場合は指摘してくださいー
0412デフォルトの名無しさん2007/11/20(火) 17:42:07
Win32APIでLoadBitmapかLoadResource使えばいいと思うが
0413デフォルトの名無しさん2007/11/20(火) 20:51:20
openするファイル名を変数にしたいのですが
例えば
char File_Name[30];
fout.open(File_Name,ios::out);
とした場合、File_Nameに文章を詰め込む(File_Name="Function_Name")
みたいなことはできますか?
いや、できないことはなさげだけど、string型が詰められないとなると手がない…
0414デフォルトの名無しさん2007/11/20(火) 20:56:15
日本語でしゃべれよ
0415デフォルトの名無しさん2007/11/20(火) 21:01:51
string型なんてものがあるのはもっと上級言語だよ。

Cでは char Filename[] と char * Filename は同じモノ
つまりFilename[]="name"としてれば
0416デフォルトの名無しさん2007/11/20(火) 21:46:21
>>415
え?
0417デフォルトの名無しさん2007/11/20(火) 21:49:26
>>415
ろ?
0418デフォルトの名無しさん2007/11/20(火) 21:50:29
>>415
>Cでは char Filename[] と char * Filename は同じモノ
違う。前者はあくまで配列で、後者はポインタ。

関数の仮引数としてなら同義だ。
void func(char Filename[]);
void func(char *Filename);
0419デフォルトの名無しさん2007/11/20(火) 21:53:01
>>413
どうしてもというならstrcpyでも使えば?
stringのc_str使えばいいとは思うけど。
string File_Name;
fout.open(File_Name.c_str(),ios::out);
04204192007/11/20(火) 21:54:23
訂正
string File_Name("Function_Name");
0421デフォルトの名無しさん2007/11/20(火) 21:57:22
char * mystrcpy( char * buf, char * src )
{
strcpy( buf, src ):
return src;
}
0422デフォルトの名無しさん2007/11/20(火) 22:08:30
初心者歓迎のスレだけど、普通は質問者の方だよな、初心者は。
0423デフォルトの名無しさん2007/11/20(火) 22:09:10
釣堀はここですね?
0424デフォルトの名無しさん2007/11/20(火) 22:53:46
水の干上がった釣り堀で喚いてるだけだけどな
0425デフォルトの名無しさん2007/11/20(火) 23:21:45
配列とポインタの実質の違いは、実体がどこにあるかだけだろ
0426デフォルトの名無しさん2007/11/20(火) 23:25:20
ほう
0427デフォルトの名無しさん2007/11/20(火) 23:51:29
>>425 別に配列じゃなくてもポインタ使うけど。
0428デフォルトの名無しさん2007/11/21(水) 00:32:33
>>425
馬鹿ですか?
0429デフォルトの名無しさん2007/11/21(水) 01:12:01
初々しい。C言語の初級と中級の中間ってとこだろうな。
0430デフォルトの名無しさん2007/11/21(水) 01:21:33
実体とか意識しだしたら大方中級な感じがする。
ここまで理解できてたらこれから先も呑み込めて行けそうじゃね?
間違いを受け止める心があればだけど・・・
0431デフォルトの名無しさん2007/11/21(水) 16:06:24
Linux環境

daemonを作りたいときに、

#include <stdlib.h>
int daemon(int nochdir, int noclose);

呼ぶのと、

#include <sys/types.h>
#include <unistd.h>

pid_t fork(void);

を2回呼ぶのって、実用上何か大きな違いはありますか?
0432デフォルトの名無しさん2007/11/21(水) 16:11:34
daemonは中でfork呼んでるだろう。
0433デフォルトの名無しさん2007/11/21(水) 16:12:46
>>432
じゃあ、fork()しかない環境ではforkを2回にして、
daemon()がある環境ではdaemon()使っとけって感じですかね。
0434wolf ◆8VH3XAqjlU 2007/11/21(水) 21:32:30
>>433
*** For your reference ***

How to Daemonize in Linux [Doug Potter]
http://www-theorie.physik.unizh.ch/~dpotter/howto/daemonize
0435デフォルトの名無しさん2007/11/21(水) 22:16:54
おまいらみんな死んでしまえ。forkするなぼけが
と、djb教授がお怒りです(嘘
0436デフォルトの名無しさん2007/11/22(木) 12:04:21
fstreamで書式付きで出力できますか
0437デフォルトの名無しさん2007/11/22(木) 12:06:31
解決しました
fprintf(fp , )は出来ないですけどsprintfでchar配列に入れて出力すれば出来ますね
0438デフォルトの名無しさん2007/11/22(木) 12:50:29
マイクロソフトのwindowsの継承とかの情報はどこで手に入れられるんですか?
機能の上位機能についてです
04394382007/11/22(木) 13:11:03
2500メガのMSDNライブラリにのってますか?
うちのパソコン鈍いので保存に二日かかりそうなんですが
あとこれってテキストファイルやhtmlに変換できますか
0440デフォルトの名無しさん2007/11/22(木) 13:17:09
>>436
<<演算子とマニピュレータ使えばできるんじゃない?
0441デフォルトの名無しさん2007/11/22(木) 20:54:43
>>438
MFCのこと?

>>439
MSDNライブラリの各記事の実体はHTML。
ただし、複数ファイルをまとめて圧縮した形で格納されている。
ms-help:で始まるURLを使えばIEからも見れる。
0442デフォルトの名無しさん2007/11/23(金) 05:06:20
http://www.kmonos.net/alang/boost/classes/next_prior.html
> next の代わりに (++lst.begin()) と書けば良いではないか?と思われるかもしれませんが、
> begin() の返すイテレータが例えば int* などの組込型であった場合、
> 残念ながらその記述はコンパイルエラーになってしまいます。

どうしてコンパイルエラーになってしまうのですか?
0443デフォルトの名無しさん2007/11/23(金) 05:33:15
組み込み型の一時オブジェクトは値を変更できない。
++0; がエラーなのと同じ。
0444デフォルトの名無しさん2007/11/23(金) 05:39:36
参照以外を返す関数の戻り値は右辺値(3.10.5)で
前置++の対象は変更可能な左辺値じゃない許されない(5.3.2)
から?
規格書買っちゃったけどイマイチ読みかたがわからねぇや
04454422007/11/23(金) 05:44:47
>>443,444
なるほど。
ありがとうございました。
0446デフォルトの名無しさん2007/11/23(金) 06:52:27
int foo() { return 0; }
++foo(); // エラー
0447デフォルトの名無しさん2007/11/23(金) 14:35:51
なんとなく書いてみた
#include <stdio.h>

int *get_number(void){
static int number[2]={0,999};
return number;
}
int main(void){
printf("%d\n", ++*get_number());
printf("%d\n", ++*get_number());
printf("%d\n", (*get_number())++);
printf("%d\n", (*get_number())++);
printf("%d\n", *get_number()+1);
printf("%d\n", *(get_number()+1));
return 0;
}
0448デフォルトの名無しさん2007/11/23(金) 14:37:57
>>447
何が目的?
0449デフォルトの名無しさん2007/11/23(金) 14:44:32
>>448
なんとなく書いてみただけからスルーしてもらっておkです

#include <stdio.h>

typedef void (*func_t)(void);
typedef func_t (*func2_t)(void);

void hello(void){printf("Hello\n");}
func_t hello_func(void){return hello;}
func2_t hello_func_func(void){return hello_func;}

int main(void){
hello_func_func()()();
return 0;
}
0450デフォルトの名無しさん2007/11/23(金) 14:45:20
ここはお前の日記帳j(ry
0451デフォルトの名無しさん2007/11/23(金) 17:01:21
処理Aと処理Bがあって、
Aは1秒ごとに、Bは5秒ごとに呼ばれるものとします。
この1秒と5秒はおおよそで良いので、sleepで止めます。

このAとBを並行して実行させたいとき、
普通はマルチスレッドにするものですか?
Linuxです。
0452デフォルトの名無しさん2007/11/23(金) 17:03:53
おおよそでいいならA5回ごとにB呼べば?
04534512007/11/23(金) 17:16:07
>>452
そこまでは「およそ」じゃないんです。
リアルタイム性は要らない程度の意味でした。
設定秒数を渡して5秒とか1秒ってのは変わりうるので。
0454デフォルトの名無しさん2007/11/23(金) 17:40:44
んじゃ、sleepで1秒待つループを作って、設定秒数ごとにそれぞれを呼ぶと。
0455デフォルトの名無しさん2007/11/23(金) 17:42:29
for (unsigned cnt; ;) {
sleep(1);
++cnt;
if (cnt % intervalA == 0) A();
if (cnt % intervalB == 0) B();
}
04564512007/11/23(金) 18:00:21
>>454-455
それだと、usleepなんかにして1秒の倍数じゃないときに駄目なんで。
■ このスレッドは過去ログ倉庫に格納されています