2005年02月12日
CPU の周波数っていくらだったかな..
RDTSC 命令を使って手っ取り早く、周波数を測定してみる...
unsigned __int64 rdtsc()
{
__asm { rdtsc };
}
void CCPUDlg::OnBnClickedButton1()
{
unsigned __int64 cycle_a,cycle_b;
CString text;
cycle_a = rdtsc();
Sleep(1 * 1000);
cycle_b = rdtsc();
text.Format( "%uHz" , cycle_b - cycle_a );
SetWindowText( text );
}
2390281768Hz と出て
あー 2.4GHzだった と手っ取り早くわかる
投稿者 kata : 11:48 | コメント (0) | トラックバック
2005年02月06日
VB シフト演算 DLL
まだこの言語は乗ってなかったか...?
VB2003には乗っている模様
一番手っ取り早いのは、掛け算でVBにて計算させる。しかし遅い(VB5現在)
a << b は a*(2^b)
a >> b は a/(2^b)
高速化のためVCで適当にDLLつくるのが良い(昔はそうだった いまは知らない)
/* VC DLL ... */
#include "stdafx.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved )
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// エクスポートされた関数
__declspec(dllexport) LONG __stdcall L_shift( LONG a , LONG b )
{
return a << b;
}
__declspec(dllexport) LONG __stdcall R_shift( LONG a , LONG b )
{
return a >> b;
}
__declspec(dllexport) BYTE __stdcall L_shiftB( BYTE a , BYTE b )
{
return a << b;
}
__declspec(dllexport) BYTE __stdcall R_shiftB( BYTE a , BYTE b )
{
return a >> b;
}
っとこうやって 適当にdefにexport かいとく
LIBRARY ktshift.dll
EXPORTS
L_shift @16
R_shift @8
L_shiftB @4
R_shiftB @2
VBから呼び出すにはー
Declare Function L_shift Lib "ktshift.dll" (ByVal a As Long, ByVal b As Long) As Long
Declare Function R_shift Lib "ktshift.dll" (ByVal a As Long, ByVal b As Long) As Long
Declare Function L_shiftB Lib "ktshift.dll" (ByVal a As Byte, ByVal b As Byte) As Byte
Declare Function R_shiftB Lib "ktshift.dll" (ByVal a As Byte, ByVal b As Byte) As Byte
変数の型はそろえてね。。
投稿者 kata : 14:41 | コメント (0) | トラックバック
2004年12月07日
あれ開発(あくまで趣味)
うひょー 010 メッセージがいつのまにやら実装されとるし^^;;
早速対応だな^^;
00:55.16 *** !!! irc.Tokyo.wide.ad.Jp [ サーバーが見つかりました ( 192.244.23.1 ) ]
00:55.16 irc.Tokyo.wide.ad.Jp [ 接続しました ]
00:55.34 ERROR Nickname is already in use. kata (unregist)
00:55.34 Auto regist NICK kata -> k4ta
00:55.35 [m_default] irc.Tokyo.wide.ad.Jp -010 -k4ta -irc.nara.wide.ad.jp -6668 -Please use this Server/Port instead
00:55.45 irc.Tokyo.wide.ad.Jp Error: Closing Link: k4ta[unknown@yourmoe.domein.moe] (Too many host connections (global))
00:55.45 !!! INFOMATION irc.Tokyo.wide.ad.Jp closing...
投稿者 kata : 01:03 | コメント (0) | トラックバック
2004年07月26日
セットアップ/デプロイトメント プロジェクト
セットアップ用のEXEをつくるためのウイザードが
VC.Net(?VS.NETか? に付属してきます。
これの基本的な使い方を簡単に解説してみましょう。
メニューの ファイル -新規作成 -プロジェクトより
セットアップ プロジェクトを作成します。
ファイル システム メニューより
(このダイアログは、ソリューションエクスプローラの右クリックメニュー - 表示より開けます。)
アプリケーションフォルダにファイルを追加していきます。
ディスクトップやプログラムメニューにショートカットを作りたい場合
ファイルを右ドラッグドロップでコンテキストメニューよりショートカットを作ります。
そして、ユーザのディスクトップ/ユーザのプログラムメニューにドラッグドロップで移動させてください。
右クリックメニューより ビルドを行い
インストールをクリックすることでテストできます。
C:\Program Files\既存の会社名\ほげら
となる 既存の会社名の設定は Manufacture プロパティを調整してください。
デフォルトのインストール先の
\既存の会社名を間に入れたくない場合、
アプリケーションフォルダのDefault Locationプロパティを
[ProgramFilesFolder][Manufacture]\[ProductName] を
[ProgramFilesFolder]\[ProductName] に変更することで実現できます。
アイコンは設定しないと、うまく表示できません。
※リビルドしても更新が適用されていない場合、正常にBuildできていないことが原因です。一度デバッグ イミディエイトを見てみましょう。
投稿者 kata : 00:43 | コメント (0) | トラックバック
2004年07月11日
なんか日付が出ないぞ!@VC
以下のコードを書いて見る
time_t t;
struct tm* ts;
time( t );
ts = localtime( &t );
if( ts ) printf( "%02i:%02i", ts->tm_hour, ts->tm_min );
日付が出ない(笑
ts に localtime がNULL をかえしているようだ。
んーなんでだろー。 不安定なのかなぁ。
ランタイム ライブラリ リファレンス
localtime、_localtime64
時刻値を現地のタイム ゾーンに合わせて変換します
ふむふむ。。 ん? 64 ?(;´Д`)
localtime 関数が世界協定時刻 (UTC) における
2038 年 1 月 18 日 19 時 >14 分 07 秒までを表すのに対し、
__time64_t 構造体を使用する _localtime64 関数では、
世界協定時刻における 3000 年 12 月 31 日 23 時 59 分 59 秒までを
表すことができます。
っていうことで時計を見てみる。 2088年1月1日。
いつだよオレ!!!
そして、localtime は 2038年以降はツカエネーのかよ!
つーことで書き直す
__time64_t t;
struct tm* ts;
_time64( t );
ts = _localtime64( &t );
if( ts ) printf( "%02i:%02i", ts->tm_hour, ts->tm_min );
めでたく 非ANSIコードが出来上がった 万歳
投稿者 kata : 00:17 | コメント (2) | トラックバック
2004年06月27日
t_jis2sjis::sjis 少し高速化
前からずっと気になってた半角かな送信前にJIS END 送ってくる人たち用の対策をしてみました。
ついでに、3文字目を無視してみました。少し高速化。
…律儀にきちんと解析するもんでもないしな(笑い
char* t_jis2sjis::sjis(const char* lpsz)
{
const char *p;
unsigned char *b;
int lenmx;
int jis = 0;
/* NULL の時は帰る */
if(lpsz == NULL)
{
trans_sjis_buffer[0] = '\0';
return trans_sjis_buffer;
}
/* 審査 */
p = lpsz; /* 検査Pointer */
b = (unsigned char*)trans_sjis_buffer; /* Result */
lenmx = MAX_CODEBUF; /* あふれ対策 */
while(( *p != '\0' ) && (lenmx > 0) )
{
/* ESC Entry
* (っつーか 3文字目みんなてきとーに入れすぎ(;´Д`)
* IRC では開始終端ともにB にするのが一般的
*/
if( p[0] == ESC )
{
if( p[1] == '$' ) jis=1;
if( p[1] == '(' ) jis=0;
/* skip */
p++, lenmx--;
if(! p[0] ) continue;
/* skip */
p++, lenmx--;
if(! p[0] ) continue;
/* skip */
/*3文字目は無視 (B|J|H|Q) */
p++, lenmx--;
continue;
}
/* if jis */
if( !jis )
{
/* normal copy */
b[0] = p[0];
/* skip */
p++, lenmx--;
b++;
}else{
/* copy after trans */
b[0] = p[0];
b[1] = p[1];
/* ...trans */
t_jis2sjis::sub(&(b[0]),&(b[1]));
/* skip */
p++, lenmx--;
b++;
if(! p[0] ) continue;
/* skip */
p++, lenmx--;
b++;
}
}
if(b) *b = 0;
return trans_sjis_buffer;
}