void MemTime(int ns) { Ns_Time start, end, diff; int i; Ns_Thread *tids; tids = ns_malloc(sizeof(Ns_Thread *) * nthreads); Ns_MutexLock(&lock); nrunning = 0; memstart = 0; Ns_MutexUnlock(&lock); printf("starting %d %smalloc threads...", nthreads, ns ? "ns_" : ""); fflush(stdout); Ns_GetTime(&start); for (i = 0; i < nthreads; ++i) { Ns_ThreadCreate(MemThread, (void *) ns, 0, &tids[i]); } Ns_MutexLock(&lock); while (nrunning < nthreads) { Ns_CondWait(&cond, &lock); } printf("waiting...."); fflush(stdout); memstart = 1; Ns_CondBroadcast(&cond); Ns_MutexUnlock(&lock); for (i = 0; i < nthreads; ++i) { Ns_ThreadJoin(&tids[i], NULL); } Ns_GetTime(&end); Ns_DiffTime(&end, &start, &diff); printf("done: %d seconds, %d usec\n", (int) diff.sec, (int) diff.usec); }
void NsAppendConn(Tcl_DString *dsPtr, Conn *connPtr, char *state) { Ns_Time now, diff; Ns_GetTime(&now); Ns_DiffTime(&now, &connPtr->times.queue, &diff); Tcl_DStringStartSublist(dsPtr); Ns_DStringPrintf(dsPtr, "%d", connPtr->id); Tcl_DStringAppendElement(dsPtr, Ns_ConnPeer((Ns_Conn *) connPtr)); Tcl_DStringAppendElement(dsPtr, state); NsAppendRequest(dsPtr, connPtr->request); Ns_DStringPrintf(dsPtr, " %ld.%ld %d", diff.sec, diff.usec, connPtr->nContentSent); Tcl_DStringEndSublist(dsPtr); }