1. 程式人生 > >進擊的小白Day003——基於TCP的Socket程式設計(二)

進擊的小白Day003——基於TCP的Socket程式設計(二)

昨天上傳的那個程式被領導評價為極其粗淺、幼稚,確實,不得不承認,得到這個評價心裡還是有些不自在,不過剛開始,我很菜,被別人嫌棄,也不能說什麼。

可能在我這種程式設計小白看來只要能實現功能就會十分欣喜,但一個有經驗的程式設計師,會考慮這套演算法是不是適合這個功能,是不是有更低耗更高效的演算法可以實現。

現在的我想要實現一個功能,在零基礎查資料的情況下,查到一個方法,在不瞭解行業背景的情況下,可能就會直接用這個方法,但有可能這個方法不是最新最有效的或者不是專門用來解決這個問題的方法,導致最後雖然可以實現功能但總存在這樣那樣的問題。還是知識面不夠,太過井底之蛙,瞭解的面太過狹窄,還需要繼續努力啊。

今天的任務是,在昨天Socket程式的基礎上,計算、反饋出程式執行每一個階段的耗時,比如互發訊息、執行演算法、空等的時間,對這些時間進行彙總,最終反饋這些時間中的平均耗時、最短及最長耗時。

因為之前的程式計算耗時是用過clock(),能夠精確到毫秒,現在是不想再用了,想嘗試一下新的,所以選擇gettimeofday()來計時,可以精確到微妙。這個函式原本是在linux下呼叫<sys/time.h>的,windows下用不了,需要進行重新定義,下面這段是我在網上找的windows下對gettimeofday()進行定義的程式碼。

windows下對gettimeofday()的定義:

#include <time.h>
#ifdef WIN32
	#include <windows.h>
#else
	#include <sys/time.h>
#endif
#ifdef WIN32
int gettimeofday(struct timeval *tp, void *tzp)
{
	time_t clock;
	struct tm tm;
	SYSTEMTIME wtm;
	GetLocalTime(&wtm);
	tm.tm_year = wtm.wYear - 1900;
	tm.tm_mon = wtm.wMonth - 1;
	tm.tm_mday = wtm.wDay;
	tm.tm_hour = wtm.wHour;
	tm.tm_min = wtm.wMinute;
	tm.tm_sec = wtm.wSecond;
	tm.tm_isdst = -1;
	clock = mktime(&tm);
	tp->tv_sec = clock;
	tp->tv_usec = wtm.wMilliseconds * 1000;
	return (0);
}
#endif

我就把這個命名為gettimeofday.h了。

學到的知識:

  1. 對於一些後文件的包含及函式的呼叫,要注意作業系統,比如sys/time.h,只能在unix下使用,windows上不可使用
  2. 各種巨集定義到底該怎麼用,#undef、#ifdef、#ifndef等